// data.jsx — shared content for GHPlanet site
// Exposes constants on window so other scripts can read them.

const PROJECTS = [
  {
    id: "tuk",
    title: "툭 (TUK)",
    titleEn: "TUK",
    client: "TUK",
    year: "2024–현재",
    services: ["앱", "백엔드", "관리자 웹", "인프라"],
    chips: ["Flutter", "NestJS", "Prisma", "Next.js", "PostgreSQL", "K8s", "Terraform"],
    summary: "캐시백·리워드 플랫폼. 쿠팡·테무·올리브영 등 주요 쇼핑몰 캐시백을 자동 적립.",
    role: "유일 풀스택 개발 · 인프라",
    duration: "2024 ~",
    award: "—",
    industry: "커머스 · 리워드",
    image: "/project-images/stores/tuk-desktop-hero.png",
    imageOrient: "landscape",
    images: [
      "/project-images/stores/tuk-desktop-hero.png",
      "/project-images/stores/tuk-desktop-feature-1.png",
      "/project-images/stores/tuk-desktop-feature-2.png",
      "/project-images/stores/tuk-desktop-feature-3.png",
      "/project-images/stores/tuk-desktop-feature-4.png",
      "/project-images/stores/tuk-app-1.png",
      "/project-images/stores/tuk-app-2.png",
      "/project-images/stores/tuk-shot-1.png",
    ],
    desc: "Flutter 앱 + NestJS·Prisma API + Next.js 관리자 + K8s·Terraform 인프라까지. 다중 인증(Phone·Kakao·Naver·Google·Apple), 어필리에이트 웹훅 처리, 출금·정산 시스템 1인 풀스택 구현.",
    link: "https://tuk.im"
  },
  {
    id: "pinned",
    title: "Pinned!",
    titleEn: "Pinned",
    client: "GHPlanet (자체 앱)",
    year: "2024–현재",
    services: ["iOS 앱", "Android 앱"],
    chips: ["iOS Native", "Android Native", "Share Extension"],
    summary: "공유하기 버튼 1초로 끝나는 SNS·콘텐츠 링크 북마크 앱. 카테고리별 나만의 모음집.",
    role: "기획 · 디자인 · 개발 · 운영",
    duration: "2024 ~ 운영 중",
    award: "—",
    industry: "프로덕티비티 · 자체 서비스",
    image: "/project-images/stores/pinned-01.png",
    images: [
      "/project-images/stores/pinned-01.png",
      "/project-images/stores/pinned-02.png",
      "/project-images/stores/pinned-03.png",
      "/project-images/stores/pinned-04.png",
    ],
    desc: "인스타·유튜브·틱톡 등 SNS와 아티클·쇼핑 링크를 OS 공유 메뉴에서 한 번에 저장. 카테고리·태그로 분류해 나만의 콘텐츠 라이브러리를 만드는 자체 운영 앱. iOS Share Extension·Android Share Intent를 활용해 어떤 앱에서든 1초 만에 저장.",
    link: "https://play.google.com/store/apps/details?id=io.ghyeok.pinned"
  },
  {
    id: "everystars",
    title: "모든별키즈",
    titleEn: "Everystars",
    client: "모든별키즈 Inc.",
    year: "2024–현재",
    services: ["웹", "백엔드"],
    chips: ["Next.js", "TypeScript", "i18n"],
    summary: "전문가 매칭 플랫폼. 아이의 학습·취미·홈티칭 전문가를 3단계로 찾아 연결.",
    role: "유일 풀스택 개발",
    duration: "2024 ~",
    award: "—",
    industry: "에듀테크 · 매칭",
    image: "/project-images/stores/everystars-desktop-hero.png",
    imageOrient: "landscape",
    images: [
      "/project-images/stores/everystars-desktop-hero.png",
      "/project-images/stores/everystars-desktop-feature-1.png",
      "/project-images/stores/everystars-desktop-feature-2.png",
      "/project-images/stores/everystars-desktop-feature-3.png",
      "/project-images/stores/everystars-desktop-detail-1.png",
      "/project-images/stores/everystars-desktop-detail-2.png",
      "/project-images/stores/everystars-desktop-detail-3.png",
      "/project-images/stores/everystars-desktop-footer.png",
    ],
    desc: "Next.js 기반 글로벌 서비스. next-intl 다국어, 전문가 탐색·1:1 채팅·예약·결제까지 통합. 신뢰 가능한 매칭을 위한 검증 플로우 설계.",
    link: "https://www.everystars.co.kr"
  },
  {
    id: "gymday",
    title: "짐데이",
    titleEn: "GymDay",
    client: "데이코어",
    year: "2018–2022",
    services: ["모바일 앱", "백엔드", "AI"],
    chips: ["Flutter", "Node.js", "Koa", "AWS Aurora Serverless", "Python"],
    summary: "누적 다운로드 100만+의 퍼스널 트레이너 앱. PHP 레거시를 Node.js로 풀 마이그레이션하고 운동 추천 AI까지.",
    role: "백엔드 · 앱 · 인프라 · AI",
    duration: "4년+ (메이저 업데이트 3회)",
    award: "—",
    industry: "헬스케어 · 피트니스",
    image: "/project-images/stores/gymday-03.png",
    images: [
      "/project-images/stores/gymday-03.png",
      "/project-images/stores/gymday-04.png",
      "/project-images/stores/gymday-05.png",
      "/project-images/stores/gymday-06.png",
      "/project-images/stores/gymday-07.png",
      "/project-images/stores/gymday-08.png",
    ],
    desc: "100% Node.js 마이그레이션, Aurora Serverless 기반 스케일 아웃 시스템 구축, Python·Tensorflow로 1,000만 운동 데이터 기반 루틴 추천 모델 개발."
  },
  {
    id: "physicalgallery",
    title: "피지컬갤러리 Pro",
    titleEn: "Physical Gallery Pro",
    client: "라이프에이드",
    year: "2019–현재",
    services: ["앱", "백엔드", "관리자 웹"],
    chips: ["Flutter", "TypeScript", "Koa", "Vue.js", "Aurora Serverless"],
    summary: "300만 구독자 피지컬갤러리 유튜브 기반의 Pro 멤버십 앱 서비스.",
    role: "유일 풀스택 개발 · 인프라",
    duration: "2019.08 ~",
    award: "—",
    industry: "헬스케어 · 미디어",
    image: "/project-images/stores/physicalgallery-02.png",
    images: [
      "/project-images/stores/physicalgallery-02.png",
      "/project-images/stores/physicalgallery-03.png",
      "/project-images/stores/physicalgallery-04.png",
      "/project-images/stores/physicalgallery-05.png",
      "/project-images/stores/physicalgallery-06.png",
      "/project-images/stores/physicalgallery-07.png",
    ],
    desc: "동시접속 2,500+ 트래픽 폭발 시 발생한 DB Lock 문제를 Query Optimizing과 AWS Aurora Serverless로 해결. ECS Auto-scale로 안정적인 서비스 운영."
  },
  {
    id: "anatomaster",
    title: "아나토미마스터",
    titleEn: "Anato Master",
    client: "용감한컴퍼니",
    year: "2022–2023",
    services: ["앱", "백엔드"],
    chips: ["Flutter", "PHP", "iOS", "Android"],
    summary: "운동지도자(트레이너)를 위한 해부학 암기 앱. 근육·뼈·관절 명칭을 퀴즈로 학습. 이파마스터의 자매 앱.",
    role: "유일 앱 개발자",
    duration: "MVP → 정식 출시",
    award: "—",
    industry: "에듀테크 · 운동지도자",
    image: "/project-images/stores/anatomaster-02.png",
    images: [
      "/project-images/stores/anatomaster-02.png",
      "/project-images/stores/anatomaster-03.png",
      "/project-images/stores/anatomaster-04.png",
      "/project-images/stores/anatomaster-05.png",
      "/project-images/stores/anatomaster-06.png",
      "/project-images/stores/anatomaster-07.png",
    ],
    desc: "Flutter 단일 코드베이스로 iOS·Android 동시 출시, 기존 이파마스터 인프라와 호환되도록 PHP API 작성."
  },
  {
    id: "iipa",
    title: "이파마스터",
    titleEn: "iiPA Master",
    client: "용감한컴퍼니",
    year: "2021–현재",
    services: ["앱", "백엔드"],
    chips: ["Flutter", "PHP", "iOS", "Android"],
    summary: "운동지도자(트레이너) 학습·커뮤니티 앱. 4만+ 트레이너가 사용하는 콘텐츠·칼럼·커뮤니티 통합 플랫폼. 용감한컴퍼니 메인 프로덕트.",
    role: "유일 앱 개발자",
    duration: "정식 출시 → 운영 고도화",
    award: "—",
    industry: "에듀테크 · 운동지도자",
    image: "/project-images/stores/iipa-02.png",
    images: [
      "/project-images/stores/iipa-02.png",
      "/project-images/stores/iipa-03.png",
      "/project-images/stores/iipa-04.png",
      "/project-images/stores/iipa-05.png",
      "/project-images/stores/iipa-06.png",
      "/project-images/stores/iipa-07.png",
    ],
    desc: "Flutter 단일 코드베이스로 iOS·Android 동시 출시, PHP API 호환성을 유지하며 콘텐츠·칼럼·커뮤니티·결제까지 1인 개발."
  },
  {
    id: "noleet",
    title: "놀잇",
    titleEn: "Noleet",
    client: "놀잇",
    year: "2022–현재",
    services: ["앱", "실시간 영상"],
    chips: ["Flutter", "Firebase", "Agora", "Svelte"],
    summary: "세상의 모든 아이를 잇는 실시간 영상 채팅 놀이 플랫폼.",
    role: "유일 풀스택 개발",
    duration: "2022 ~",
    award: "—",
    industry: "키즈 · 라이브",
    image: "/project-images/stores/noleet-02.png",
    images: [
      "/project-images/stores/noleet-01.png",
      "/project-images/stores/noleet-02.png",
      "/project-images/stores/noleet-03.png",
      "/project-images/stores/noleet-04.png",
      "/project-images/stores/noleet-05.png",
    ],
    desc: "Agora 기반 실시간 영상통화, Firebase Serverless 아키텍처, Svelte 관리자 CMS를 1인 풀스택으로 구축."
  },
  {
    hidden: true,
    id: "speakerz",
    title: "Speakerz",
    titleEn: "Speakerz",
    client: "Speakerz",
    year: "2021–현재",
    services: ["앱", "실시간 방송"],
    chips: ["Flutter", "Agora", "Firebase", "Serverless"],
    summary: "실시간 온라인 강연 플랫폼. 송수신·결제·서버리스 아키텍처까지 1인 구현.",
    role: "유일 풀스택 개발",
    duration: "2021.03 ~",
    award: "—",
    industry: "에듀테크 · 라이브",
    image: "/project-images/speakerz.png",
    desc: "Agora Engine 기반 실시간 방송 송수신, Firestore·Storage·Cloud Functions로 서버리스 아키텍처 구축."
  },
  {
    id: "soultalk",
    title: "소울톡",
    titleEn: "Soul Talk",
    client: "소울톡",
    year: "2022",
    services: ["앱", "백엔드", "관리자 웹"],
    chips: ["Flutter", "Firebase", "Agora", "Vue3"],
    summary: "온라인 타로 상담 앱. 실시간 카드 뽑기·채팅·통화 상담을 한 앱으로.",
    role: "유일 풀스택 개발",
    duration: "6개월",
    award: "—",
    industry: "라이프스타일 · 상담",
    image: "/project-images/stores/soultalk-02.png",
    images: [
      "/project-images/stores/soultalk-02.png",
      "/project-images/stores/soultalk-03.png",
      "/project-images/stores/soultalk-04.png",
      "/project-images/stores/soultalk-05.png",
      "/project-images/stores/soultalk-06.png",
      "/project-images/stores/soultalk-07.png",
    ],
    desc: "Firestore 기반 상담사·유저 채팅 구현, Agora Engine으로 통화 상담, Vue3 관리자 CMS까지 단일 개발자로 완성."
  },
  {
    hidden: true,
    id: "modufitness",
    title: "모두의 피트니스",
    titleEn: "Modu Fitness",
    client: "용감한컴퍼니",
    year: "2022–2023",
    services: ["앱", "실시간 트레이닝"],
    chips: ["Flutter", "Go", "Twilio", "WebRTC"],
    summary: "온라인으로 실시간 PT를 받을 수 있는 트레이닝 앱 고도화.",
    role: "앱 · 서버 고도화",
    duration: "8개월",
    award: "—",
    industry: "헬스케어",
    desc: "Go로 작성된 API 서버 고도화, Twilio 기반 RTC 송수신 안정화, Flutter 앱 UX 재설계."
  },
];

const SERVICES = [
  {
    n: "01",
    title: "프로덕트 설계",
    titleKo: "프로덕트 설계",
    lead: "스타트업의 0→1과 1→100을 모두 경험한 12년차의 시선으로, 비즈니스 가설과 기술 의사결정을 같은 테이블에서 정리합니다. AI 리서치로 시장·경쟁 분석과 스코핑을 일 단위로 단축합니다.",
    items: ["프로덕트 디스커버리", "기술 아키텍처 설계", "MVP 스코핑", "리소스·일정 추정", "기술 부채 진단"],
    anchorIds: ["tuk", "everystars"],
    anchorLabel: "TUK · 모든별키즈에서 적용",
  },
  {
    n: "02",
    title: "모바일 앱",
    titleKo: "모바일 앱",
    lead: "Flutter 단일 코드베이스로 iOS·Android를 동시에. 필요하면 네이티브(Kotlin·Swift)까지 직접 작성합니다. AI 코드 보조로 화면 구현 속도를 끌어올립니다.",
    items: ["Flutter · Dart", "iOS (Swift) · Share Extension", "Android (Kotlin · Java)", "Firebase · Agora · Twilio", "Play Store · App Store 출시·운영"],
    anchorIds: ["tuk", "pinned", "iipa"],
    anchorLabel: "TUK · Pinned! · 이파마스터에서 적용",
  },
  {
    n: "03",
    title: "백엔드 · 인프라",
    titleKo: "백엔드 · 인프라",
    lead: "트래픽 폭발을 직접 막아본 사람만 짤 수 있는 서버. Node·Go·Python에 AWS·GCP·Kubernetes까지 한 사람이 책임집니다. AI로 로그·이슈·SQL 분석을 가속해 장애 대응 시간을 줄입니다.",
    items: ["NestJS · Koa · Express", "Prisma · TypeORM · Sequelize", "Go · Python · PHP", "GraphQL · REST", "AWS (ECS · Aurora Serverless · Lambda) · GCP", "Kubernetes · Terraform · Docker", "Firebase · Cloud Functions"],
    anchorIds: ["tuk", "gymday", "physicalgallery"],
    anchorLabel: "TUK · 짐데이 · 피지컬갤러리 Pro에서 적용",
  },
  {
    n: "04",
    title: "웹 · 관리자",
    titleKo: "웹 · 관리자",
    lead: "운영자가 실제로 ‘쓰는’ 관리자 도구. 데이터 흐름부터 권한 모델까지 같이 설계합니다. AI로 반복 폼·테이블 코드를 짧게 줄이고, 일관된 디자인 시스템 위에 올립니다.",
    items: ["Next.js · React · Vue · Svelte · Angular", "TypeScript · i18n (next-intl)", "디자인 시스템", "CMS · 어드민", "그로스 분석"],
    anchorIds: ["everystars", "tuk"],
    anchorLabel: "모든별키즈 · TUK 어드민에서 적용",
  },
  {
    n: "05",
    title: "AI 적용",
    titleKo: "AI 적용",
    lead: "외주가 아닌 ‘내 팀처럼’ 움직이는 AI. Claude·GPT·Cursor·MCP를 실제 개발 파이프라인에 통합해 1인 풀스택을 가능하게 만든 노하우를 그대로 프로덕트에 옮겨드립니다.",
    items: ["LLM 기능 통합 (Claude · OpenAI)", "프로덕트 내 RAG · 에이전트 워크플로우", "MCP 서버 설계 · 자동화", "사내 AI 도구 (코드·디자인·리서치 가속)", "프롬프트 엔지니어링 · 평가"],
    anchorIds: ["tuk", "pinned"],
    anchorLabel: "자체 운영 도구와 자체 앱에서 검증",
  },
];

const TEAM = [
  { name: "권혁 GHyeok", role: "12년차 풀스택 개발자 · 기획 · 디자인 · 개발 · 운영", k: "G" },
];

const COLLABORATORS = [];

const POSTS = [
  { n: "008", t: "PHP → Node.js, 100만 다운로드 앱을 어떻게 마이그레이션했나", tag: "Case Study", date: "2024.11.18" },
  { n: "007", t: "Aurora Serverless로 동시접속 2,500명을 버틴 이야기", tag: "Backend", date: "2024.08.22" },
  { n: "006", t: "Flutter로 1인 풀스택이 가능한 이유", tag: "Mobile", date: "2024.05.06" },
  { n: "005", t: "GraphQL Subscription 실시간 채팅 구현 노트", tag: "Engineering", date: "2024.02.14" },
  { n: "004", t: "Agora Engine으로 라이브 방송 안정성 끌어올리기", tag: "Live", date: "2023.11.30" },
  { n: "003", t: "1,000만 운동 데이터로 추천 모델 만들기", tag: "AI", date: "2023.08.10" },
  { n: "002", t: "스타트업 9년, 외주를 ‘잘 쓰는’ 회사들의 공통점", tag: "Note", date: "2023.04.02" },
];

const CLIENTS = ["데이코어", "라이프에이드", "용감한컴퍼니", "Speakerz", "펫소스", "페어웨이", "놀잇", "소울톡", "랩맥스", "디톡스", "백주부 요리 레시피", "아날로그 사이트"];

const NAV_LINKS = [
  { key: "home", label: "홈" },
  { key: "about", label: "소개" },
  { key: "services", label: "서비스" },
  { key: "work", label: "포트폴리오" },
  { key: "contact", label: "연락" },
];

const VISIBLE_PROJECTS = PROJECTS.filter(p => !p.hidden);
Object.assign(window, { PROJECTS: VISIBLE_PROJECTS, ALL_PROJECTS: PROJECTS, SERVICES, TEAM, COLLABORATORS, POSTS, CLIENTS, NAV_LINKS });
