// =============================================================================
// Cédrick Picard — Portfolio data
// =============================================================================
//
// TO ADD A NEW PROJECT
//   Append an object to the PROJECTS array below.
//   Required keys: id, title, tagline, role, engine, year, status,
//                  statusColor, cover, accentHue, description, highlights[],
//                  stats[], tech[], links[], log[]
//   Optional:      youtube (YT video ID, e.g. "5vs53SrDuh4")
//                  itch    (full itch.io URL)
//                  note    (yellow callout shown above the description)
//   statusColor:   "green" | "amber" | "blue" | "purple" | "pink"
//   cover:         must match a key in covers.jsx → window.Covers.<key>
//   accentHue:     OKLCH hue (0-360). Sets per-project tinted glow.
//
// TO ADD A CERTIFICATION
//   Append an object { year, issuer, name } to CERTIFICATIONS.
//
// TO ADD A TIMELINE ENTRY (job / school / etc.)
//   Append { year, role, where, note } to TIMELINE.
//
// TO ADD A SKILL / ENGINE
//   Add { name, abbr } to the relevant group in SKILLS. abbr is the 2-letter
//   monogram shown on the tile (e.g. "UE" for Unreal).
//
// TO ADD A DOWNLOAD (build, source zip, etc.) TO A PROJECT
//   On any project below, set the `download` field. Single download:
//     download: {
//       file:  "downloads/zeus-demo.zip",  // path relative to portfolio.html
//       label: "Download demo build",       // button text
//       size:  "120 MB"                     // optional, just for display
//     }
//   Multiple? Use an array of those objects.
//   Drop the actual file at the path you specify, then it appears in the
//   project's Overview tab. Leave the field absent / null to hide it.
// =============================================================================

const PROJECTS = [
  {
    id: "projectzeus",
    title: "Project Zeus",
    tagline: "Capstone studio project — Unreal C++ gameplay & cinematics",
    role: "Gameplay Developer",
    engine: "Unreal Engine 5 / C++ & Blueprints",
    year: "2024 — 2025",
    status: "Shipped",
    statusColor: "green",
    cover: "zeus",
    accentHue: 220,
    youtube: "5vs53SrDuh4",
    description: "Capstone project built with CtrlAltElite at Algonquin College's Capstone Studio. I owned player mechanics and UI work in Unreal C++ and Blueprints, and built the cinematic systems using Sequencer. We showcased the game weekly at the Canadian Aviation and Space Museum for public playtests — the kind of feedback loop you can't get any other way.",
    highlights: [
      "Built player mechanics and UI in Unreal C++ + Blueprints",
      "Implemented in-engine cinematics with Sequencer",
      "Weekly public showcases at the Canadian Aviation and Space Museum",
      "Worked inside a structured studio pipeline (CtrlAltElite team)"
    ],
    stats: [
      { label: "Duration", value: "8 months" },
      { label: "Engine", value: "UE5" },
      { label: "Team", value: "Studio" },
      { label: "Showcases", value: "Weekly" }
    ],
    tech: ["Unreal Engine 5", "C++", "Blueprints", "Sequencer", "Perforce"],
    links: [
      { label: "Watch trailer", href: "https://youtu.be/5vs53SrDuh4" }
    ],
    // download: { file: "downloads/project-zeus-build.zip", label: "Download build", size: "—" },
    log: [
      { date: "2025.04", note: "Final capstone showcase" },
      { date: "2025.02", note: "Cinematics integration complete" },
      { date: "2024.11", note: "First public playtest — Museum" },
      { date: "2024.09", note: "Project kickoff at Capstone Studio" }
    ]
  },
  {
    id: "ghostrunner-trailer",
    title: "Ghostrunner — Fan Trailer",
    tagline: "Cinematography class project. Not an official trailer.",
    role: "Editor & Cinematographer",
    engine: "CapCut · existing game footage",
    year: "2024",
    status: "Coursework",
    statusColor: "purple",
    cover: "ghost",
    accentHue: 350,
    youtube: "AUjRPGCjjRs",
    note: "Made for an Algonquin College cinematography class — not affiliated with the Ghostrunner game or its developers.",
    description: "A fan-made trailer cut for a cinematography class at Algonquin College. I sourced clips from existing Ghostrunner gameplay footage and edited everything in CapCut — focusing on pacing, beat-matching cuts to music, and building tension through shot length. This was about learning the craft of editing, not pretending to be marketing material.",
    highlights: [
      "Edited entirely in CapCut from existing gameplay footage",
      "Focus on rhythm-cutting and shot pacing",
      "Cinematography class deliverable — Algonquin College"
    ],
    stats: [
      { label: "For", value: "Class" },
      { label: "Tool", value: "CapCut" },
      { label: "Discipline", value: "Editing" },
      { label: "School", value: "Algonquin" }
    ],
    tech: ["CapCut", "Cinematography", "Sound design", "Color"],
    links: [
      { label: "Watch on YouTube", href: "https://youtu.be/AUjRPGCjjRs" }
    ],
    // download: { file: "downloads/ghostrunner-trailer.mp4", label: "Download trailer (.mp4)", size: "—" },
    log: [
      { date: "2024", note: "Submitted for Cinematography class" }
    ]
  },
  {
    id: "konata",
    title: "Konata — Discord Music Bot",
    tagline: "A scalable music bot with sharding and persistent state",
    role: "Solo Developer",
    engine: "Node.js / SQLite",
    year: "2025",
    status: "Open Source",
    statusColor: "blue",
    cover: "konata",
    accentHue: 168,
    youtube: "VuJqhkwSLtE",
    description: "A Discord music bot that supports YouTube, Spotify and SoundCloud, with playlists, filters and premium features. I built it around Discord.js sharding so it handles multi-server load efficiently, and tuned audio streaming + SQLite-backed persistent storage to keep performance reliable across reconnects and restarts.",
    highlights: [
      "Sharded architecture for multi-server scale",
      "Audio streaming optimisation across multiple sources (YouTube / Spotify / SoundCloud)",
      "Persistent state in SQLite — playlists & settings survive restarts",
      "Public repo with active development"
    ],
    stats: [
      { label: "Runtime", value: "Node.js" },
      { label: "Storage", value: "SQLite" },
      { label: "Sources", value: "3+" },
      { label: "Sharding", value: "Yes" }
    ],
    tech: ["Node.js", "JavaScript", "Discord.js", "SQLite", "FFmpeg"],
    links: [
      { label: "GitHub repo", href: "https://github.com/C3ddy/konata-discord-music-bot" },
      { label: "Demo video", href: "https://youtu.be/VuJqhkwSLtE" }
    ],
    // download: { file: "downloads/konata-source.zip", label: "Download source (.zip)", size: "—" },
    log: [
      { date: "2025", note: "Public release on GitHub" },
      { date: "2025", note: "Sharding + persistence rolled in" }
    ]
  },
  {
    id: "snowy-parkour",
    title: "Snowy Parkour",
    tagline: "Beat the clock, grab the yellow box.",
    role: "Solo Developer",
    engine: "WebGL · browser game",
    year: "2024",
    status: "Itch.io",
    statusColor: "amber",
    cover: "snowy",
    accentHue: 195,
    itch: "https://nyxoril.itch.io/snowy-parkour",
    description: "A short browser parkour racer hosted on itch.io. A tight single-objective loop — get to the yellow box before the timer runs out. Built to practice level layout and timing tuning; the kind of project where the goal is to ship something small and complete.",
    highlights: [
      "Shipped publicly on itch.io",
      "Single-objective time-attack loop",
      "Plays in the browser — no install"
    ],
    stats: [
      { label: "Platform", value: "Browser" },
      { label: "Genre", value: "Racing" },
      { label: "Goal", value: "Yellow box" },
      { label: "Host", value: "itch.io" }
    ],
    tech: ["Game design", "Level layout", "Web build"],
    links: [
      { label: "Play on itch.io", href: "https://nyxoril.itch.io/snowy-parkour" },
      { label: "Nyxoril on itch.io", href: "https://nyxoril.itch.io/" }
    ],
    // download: { file: "downloads/snowy-parkour.zip", label: "Download build (.zip)", size: "—" },
    log: [
      { date: "2024", note: "Released on itch.io" }
    ]
  },
  {
    id: "threejs-porsche",
    title: "Three.js Porsche",
    tagline: "Interactive 3D model with custom shaders and HDR lighting",
    role: "Solo Developer",
    engine: "Three.js / WebGL",
    year: "2025",
    status: "Open Source",
    statusColor: "blue",
    cover: "porsche",
    accentHue: 12,
    description: "My first Three.js project — a 3D Porsche viewer with interactive controls, HDR environment lighting and a couple of custom shaders. Built as a learning exercise on the way to a fully 3D portfolio. Source is public and the lessons fed directly into the React/Three.js portfolio I'm building next.",
    highlights: [
      "Custom shaders for paint & glass",
      "HDR environment lighting + image-based reflections",
      "Orbit controls + interactive scene tuning",
      "Public repo for anyone learning Three.js"
    ],
    stats: [
      { label: "Renderer", value: "WebGL" },
      { label: "Lighting", value: "HDR / IBL" },
      { label: "Shaders", value: "Custom" },
      { label: "Goal", value: "Learning" }
    ],
    tech: ["Three.js", "JavaScript", "GLSL", "WebGL"],
    links: [
      { label: "GitHub repo", href: "https://github.com/C3ddy/first-threejs-project" }
    ],
    // download: { file: "downloads/threejs-porsche.zip", label: "Download source (.zip)", size: "—" },
    log: [
      { date: "2025", note: "First public Three.js project" }
    ]
  },
  {
    id: "this-portfolio",
    title: "This Portfolio",
    tagline: "Built with me & Claude. You're looking at it right now.",
    role: "Designer & Developer",
    engine: "React · JSX · CSS · animated SVG",
    year: "2026",
    status: "Live",
    statusColor: "green",
    cover: "portfolio",
    accentHue: 285,
    note: "Yes, this is the website you're currently on. Click around — every cover art is hand-written SVG, the modal you're reading is React, and the scope crept exactly as much as you'd expect.",
    description: "A from-scratch portfolio built over a couple of evenings with Claude as a pair-programmer. No site-builder, no template — just React, hand-written CSS and a pile of animated SVG covers I drew one project at a time. Every interaction was designed to feel like a small game UI: status pills, tabs, mono captions, mouse-tracked spotlights.",
    highlights: [
      "All project covers are hand-coded animated SVG — no images",
      "Mouse-tracked spotlight + parallax glow on cards",
      "Per-project accent hues drive every glow & gradient via CSS custom properties",
      "Built with Claude as a back-and-forth pair-programmer"
    ],
    stats: [
      { label: "Stack", value: "React" },
      { label: "Site builder", value: "None" },
      { label: "Cover art", value: "SVG" },
      { label: "Tracking", value: "Zero" }
    ],
    tech: ["React", "JSX", "CSS", "SVG", "Babel"],
    links: [
      { label: "Built with Claude", href: "https://claude.ai" }
    ],
    log: [
      { date: "2026", note: "First public version live" }
    ]
  }
];

// =============================================================================
// SKILLS — periodic-table-style tiles. abbr = 2-3 character monogram.
// =============================================================================
const SKILLS = [
  {
    group: "Game engines",
    items: [
      { name: "Unreal Engine 5", abbr: "UE" },
      { name: "Unity",           abbr: "Un" },
      { name: "Godot",           abbr: "Go" },
      { name: "Raylib",          abbr: "Ra" }
    ]
  },
  {
    group: "Languages",
    items: [
      { name: "C++",        abbr: "C++" },
      { name: "C#",         abbr: "C#" },
      { name: "JavaScript", abbr: "Js" },
      { name: "Node.js",    abbr: "Nd" },
      { name: "Python",     abbr: "Py" },
      { name: "Java",       abbr: "Jv" },
      { name: "Lua",        abbr: "Lu" },
      { name: "GLSL",       abbr: "Gl" }
    ]
  },
  {
    group: "Graphics / 3D",
    items: [
      { name: "OpenGL",    abbr: "Og" },
      { name: "Three.js",  abbr: "3j" },
      { name: "bgfx",      abbr: "Bg" },
      { name: "Sequencer", abbr: "Sq" },
      { name: "Shaders",   abbr: "Sh" }
    ]
  },
  {
    group: "Web & data",
    items: [
      { name: "React",        abbr: "Re" },
      { name: "Tailwind CSS", abbr: "Tw" },
      { name: "HTML / CSS",   abbr: "Ht" },
      { name: "SQLite3",      abbr: "Sl" },
      { name: "JSON",         abbr: "Js" }
    ]
  }
];

const CERTIFICATIONS = [
  { year: "2026", issuer: "IBM",   name: "Back-End Apps with Node.js & Express" },
  { year: "2026", issuer: "IBM",   name: "Front-End Apps with React" },
  { year: "2026", issuer: "IBM",   name: "Getting Started with Git & GitHub" },
  { year: "2026", issuer: "IBM",   name: "Introduction to HTML, CSS & JavaScript" },
  { year: "2025", issuer: "Unity", name: "Certified Associate: Programmer" },
  { year: "2022", issuer: "Unity", name: "Certified User: Programmer" }
];

const TIMELINE = [
  { year: "2024 — 2025", role: "Game Developer · Capstone Studio (CtrlAltElite)", where: "Algonquin College — Ottawa, ON", note: "Player mechanics, UI and cinematics in Unreal C++ + Blueprints. Public showcases at the Canadian Aviation and Space Museum." },
  { year: "2025",        role: "Mover Helper",                                     where: "AMJ Campbell Moving — North Bay, ON", note: "Supported moving crews on time-sensitive residential & commercial jobs. Physical work that taught coordination and reliability." },
  { year: "2022 — 2025", role: "Crew Trainer",                                     where: "McDonald's — Ottawa, ON",            note: "Trained new crew on operational procedures and front-line service. Multi-tasking under pressure, every shift." },
  { year: "2022 — 2025", role: "Advanced Diploma · Game Development",              where: "Algonquin College — Dean's List · GPA 3.18", note: "Focus: C++, Unreal Engine, Unity, Godot and web development." }
];

window.PORTFOLIO_DATA = { PROJECTS, SKILLS, CERTIFICATIONS, TIMELINE };
