// data.jsx — Content for the Kengsleys Louissaint portfolio

const KATAKANA_GRID = (() => {
  const chars = "アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲン0123456789";
  const lines = [];
  for (let r = 0; r < 80; r++) {
    let line = "";
    for (let c = 0; c < 90; c++) {
      line += chars[Math.floor(Math.random() * chars.length)];
      line += " ";
    }
    lines.push(line);
  }
  return lines.join("\n");
})();

const SERVICES = [
  {
    id: "01",
    code: "svc.web_app",
    name: "Web Applications",
    jp: "ウェブアプリ — full-stack systems",
    desc: "Applications full-stack rapides, sécurisées, scalables. Architectures Django + Python côté serveur, JS moderne côté client. Dashboards, SaaS, plateformes métier.",
    items: [
      { k: "Framework", v: "Django · DRF · FastAPI" },
      { k: "Frontend", v: "Vanilla JS · Alpine · React" },
      { k: "Database", v: "PostgreSQL · Redis" },
      { k: "Auth & API", v: "OAuth2 · JWT · REST" },
    ],
    price: "à partir de CA$2 400",
    eta: "4–8 semaines",
  },
  {
    id: "02",
    code: "svc.website",
    name: "Sites Vitrines",
    jp: "コーポレートサイト — brand & business",
    desc: "Sites d'entreprise et landing pages haute performance. SEO technique, perf 95+ Lighthouse, CMS sur mesure, animations soignées.",
    items: [
      { k: "Stack", v: "HTML · CSS · JS · Astro" },
      { k: "Perf", v: "≥ 95 Lighthouse" },
      { k: "SEO", v: "Schema · OG · Sitemap" },
      { k: "CMS", v: "Headless · Wagtail · Strapi" },
    ],
    price: "à partir de CA$890",
    eta: "2–4 semaines",
  },
  {
    id: "03",
    code: "svc.identity",
    name: "Design d'Identité",
    jp: "ブランドデザイン — visual systems",
    desc: "Identités visuelles complètes : logo, palette, typographie, guidelines. Direction artistique digitale orientée produit.",
    items: [
      { k: "Livrables", v: "Logo · Brandbook · UI Kit" },
      { k: "Tooling", v: "Figma · Affinity" },
      { k: "Composantes", v: "Tokens · Design System" },
      { k: "Itérations", v: "3 rounds inclus" },
    ],
    price: "à partir de CA$1 200",
    eta: "3–5 semaines",
  },
  {
    id: "04",
    code: "svc.consulting",
    name: "Audit & Conseil",
    jp: "テクニカル相談 — code review",
    desc: "Audit technique, code review, optimisation de stack existante. Refactoring Django, perf web, sécurité, dette technique.",
    items: [
      { k: "Audit", v: "Code · Perf · Sécurité" },
      { k: "Rapport", v: "PDF + Loom détaillé" },
      { k: "Refacto", v: "Roadmap priorisée" },
      { k: "Support", v: "30 jours inclus" },
    ],
    price: "à partir de CA$450",
    eta: "1–2 semaines",
  },
];

const PROJECTS = [
  {
    id: "PJ-001",
    name: "TENS Succès",
    tag: "E-learning adaptatif · préparation TENS · Québec",
    year: "2026",
    client: "TENS Succès",
    stack: ["JavaScript", "Firebase", "Node.js", "Stripe", "Gemini", "PWA / TWA", "Vercel"],
    status: "LIVE",
    role: "Conception · Full-Stack · IA & paiements · Mise en prod",
    highlights: [
      "En prod · 120+ étudiants, 34 600+ exercices, 75 % de réussite moyen",
      "SPA sans framework (modules JS natifs) · moteur de scaffolding bloc par bloc",
      "Tuteur IA Gemini · proxy sécurisé, quotas, rate-limit, circuit breaker + cascade",
      "Paiements Stripe · webhooks signés, fail-closed, révocation sur remboursement",
      "Accessibilité TDAH/TSA · gamification XP/badges/streaks · chat temps réel",
      "Sécurité defense-in-depth (Firestore, DOMPurify) · Loi 25/RGPD · PWA → Android TWA",
    ],
    span: "s-6 r-4",
    variant: "v1",
    url: "https://prep-tens.ca",
  },
  {
    id: "PJ-002",
    name: "Black & Beauty",
    tag: "Site vitrine + console admin sans-code · onglerie & épilation · Montréal",
    year: "2026",
    client: "Black & Beauty Studio",
    stack: ["HTML/CSS/JS", "Next.js 16", "React 19", "TypeScript", "Auth.js v5", "Redis", "Vercel"],
    status: "LIVE",
    role: "Conception · Full-Stack · Sécurité · Formation",
    highlights: [
      "Site vitrine statique (HTML/CSS/JS vanilla, 9 pages) + hydratation JSON",
      "Console d'admin sans-code · 12 écrans · la cliente gère tout le contenu",
      "CMS via GitHub Contents API · chaque sauvegarde = commit versionné (lock SHA)",
      "Auth pro · Auth.js v5, Argon2id OWASP, sessions Redis, kill-switch d'urgence",
      "Sécurité · CSP à nonces + strict-dynamic · 2 audits traités à 100 % · 0 vuln prod",
      "Conformité Loi 25 · registre & procédure d'incident · Square Appointments intégré",
    ],
    span: "s-6 r-4",
    variant: "v4",
    url: "https://www.blackandbeautystudio.ca/",
  },
  {
    id: "PJ-003",
    name: "Lakay Nou",
    tag: "Pâtisserie & traiteur haïtien · double marque · Montréal",
    year: "2026",
    client: "Lakay Nou",
    stack: ["Next.js 15", "React 19", "TypeScript", "PostgreSQL", "@vercel/blob", "Resend"],
    status: "LIVE",
    role: "Conception · Full-Stack · Mise en prod",
    highlights: [
      "Next.js 15 App Router · React 19 · TypeScript strict · CSS vanille",
      "Double marque (pâtisserie + traiteur) sur un schéma à colonne discriminante",
      "PostgreSQL Neon + @vercel/blob · prix relus serveur, total infalsifiable",
      "Server Actions · auth cookie HMAC maison, rate-limit, lockout, upload magic-byte",
      "Sécurité durcie (CSP stricte, HSTS preload, COOP/CORP) · conformité Loi 25",
      "Courriels transactionnels Resend fail-open · gabarits brandés par volet",
    ],
    span: "s-6 r-4",
    variant: "v2",
    url: "https://lakay-nou.ca",
  },
  {
    id: "PJ-004",
    name: "Friday Night",
    tag: "Site vitrine immersif · streamer montréalais",
    year: "2026",
    client: "Friday Night",
    stack: ["React", "Vite", "JavaScript", "Vercel", "GitHub Actions", "SonarCloud"],
    status: "LIVE",
    role: "Conception · Front-end · Mise en prod",
    highlights: [
      "SPA React + Vite · animations néon, timeline au scroll, horloge MTL temps réel",
      "Sécurité durcie · CSP stricte, HSTS preload, COOP/COEP/CORP, security.txt",
      "Conformité Loi 25 · politique de confidentialité & mentions légales",
      "CI/CD GitHub Actions · actions épinglées SHA, audit bloquant, Dependabot",
      "Qualité · 2 vulnérabilités corrigées, SonarCloud au vert",
    ],
    span: "s-6 r-4",
    variant: "v3",
    url: "https://friday-night.ca",
  },
];

const STACK = [
  { num: "01", name: "Python", lvl: "Expert", v: 96 },
  { num: "02", name: "Django", lvl: "Expert", v: 94 },
  { num: "03", name: "JavaScript", lvl: "Avancé", v: 90 },
  { num: "04", name: "HTML & CSS", lvl: "Expert", v: 98 },
  { num: "05", name: "PostgreSQL", lvl: "Avancé", v: 82 },
  { num: "06", name: "React", lvl: "Avancé", v: 78 },
  { num: "07", name: "DevOps", lvl: "Inter.", v: 65 },
  { num: "08", name: "Design / Figma", lvl: "Avancé", v: 85 },
  { num: "09", name: "TailwindCSS", lvl: "Expert", v: 92 },
  { num: "10", name: "Git / CI/CD", lvl: "Avancé", v: 80 },
];

const PROCESS = [
  { id: "01", nm: "Discovery", ja: "発見", dc: "Cadrage des objectifs, audit existant, contraintes techniques. Specs claires avant d'écrire une seule ligne." },
  { id: "02", nm: "Design", ja: "設計", dc: "Wireframes, hi-fi mockups, design system. Validation rapide via prototypes interactifs." },
  { id: "03", nm: "Build", ja: "構築", dc: "Sprints de 1 à 2 semaines. Commits propres, code review, tests automatisés, démo en continu." },
  { id: "04", nm: "Ship", ja: "出荷", dc: "Déploiement CI/CD, monitoring, formation. Support inclus 30 jours post-livraison." },
];

const BOOT_LINES = [
  { t: 80, c: <><span className="dim">[ 0.001 ]</span> KENGS-OS v4.0.0 booting...</> },
  { t: 60, c: <><span className="dim">[ 0.014 ]</span> mounting <span className="ok">/dev/identity</span></> },
  { t: 60, c: <><span className="dim">[ 0.022 ]</span> loading kernel modules</> },
  { t: 80, c: <><span className="dim">[ 0.041 ]</span> python3.12 ............... <span className="ok">OK</span></> },
  { t: 80, c: <><span className="dim">[ 0.063 ]</span> django==5.0 .............. <span className="ok">OK</span></> },
  { t: 80, c: <><span className="dim">[ 0.084 ]</span> node v22.4 ............... <span className="ok">OK</span></> },
  { t: 80, c: <><span className="dim">[ 0.097 ]</span> initializing neon shaders</> },
  { t: 60, c: <><span className="dim">[ 0.112 ]</span> calibrating CRT scanlines</> },
  { t: 60, c: <><span className="dim">[ 0.128 ]</span> halftone engine ........... <span className="ok">OK</span></> },
  { t: 90, c: <><span className="dim">[ 0.145 ]</span> mounting <span className="ok">/portfolio</span> ....... 7 projects</> },
  { t: 90, c: <><span className="dim">[ 0.167 ]</span> identity verified ........ <span className="ok">KENGSLEYS.LOUISSAINT</span></> },
  { t: 120, c: <><span className="pr">$</span> ready.</> },
];

window.PORTFOLIO_DATA = { KATAKANA_GRID, SERVICES, PROJECTS, STACK, PROCESS, BOOT_LINES };
