ABTI 고도화 — 164질문 풀 + 프로필 모드 + Deep 타입 데이터
개요
abti.crowny.org의 ABTI 성격유형검사를 전면 고도화했다.
- 질문: 16→64→164개 풀 (매회 32개 랜덤 선택, 축당 8개)
- 기본형 100개: 4학년 여자아이 기준, child/teen/adult 태그
- 전문가형 64개: 커리어/기술/AI 시나리오
- 프로필 선택 UI: 나이대(8-12/13-17/18+), 성별, 모드(일상/전문)
- 유형 데이터: 16유형 × deep 데이터 (growthPath, compatibility, career)
- 언어: 16개 언어 전체 완성
- UI: 신뢰도 점수, 결과 카드 다운로드, 질문 셔플
작업 내용
1차: 16→32 질문 확장
- 4개 축(HT, CP, LI, AV) × 새 질문 4개 = 16개 추가
- 소넷 에이전트 4개 병렬 번역 (15개 언어)
2차: 질문 전면 교체 + 64 풀 구축
새로운 32개 질문 설계 (더 감정적 뉘앙스, 균형 잡힌 선택지)
HT: 봉사/자동화, 병원 개선, 생일 선물, 이웃 갈등, AI 예술상, 원격 팀, AI 동반자, 추도사
CP: 리브랜딩, 프레젠테이션, 기아 해결, 공저, 예산 경쟁, 시민 서비스, 팟캐스트, 가업
LI: 건강 치료, 교착 협상, 예술 피드백, 공원 설계, 상반된 조언, 기후 연설, 스타트업 투자, 프로젝트 의문
AV: 기본소득, 6개월 여행, 분야 융합, 외국 도시, 새 식단, 계획도시, LLM 교체, 예상 외 휴가
기존 32 + 새 32 = 64개 풀 → selectQuestions() 랜덤 선택
소넷 에이전트 4개 병렬 번역 (15개 언어, 2차)3차: Deep 타입 데이터 번역
- 16유형의 growthPath (도구/스킬/팁), compatibility (최적/도전 유형), career (4개 경력)
- 소넷 에이전트 3개 병렬 번역 (15개 언어)
- 총 16유형 × 16언어 = 256개 타입 프로필 완성
4차: 164 질문 풀 + 프로필 모드
기본형 100개 질문 설계 (4학년 여자아이 기준)
축당 25개 (HT/CP/LI/AV), child 15 + teen 5 + adult 5
소넷 에이전트 4개 병렬 설계
프로필 선택 UI (app.js)
welcome → 프로필 선택(나이/성별/모드) → intro → 질문
6개 모드: child/teen/adult × basic/pro
태깅 시스템: tags: { age, gender } + selectQuestions() 필터
16개 언어 번역 (소넷 에이전트 8개 세션)
i18n.js: 5027줄 → 11635줄기타 고도화 (다른 세션)
- 질문 셔플 (
selectQuestions()) — 매회 다른 조합
- 신뢰도 점수 (
calculateConfidence()) — 일관성 60% + 마진 40%
- 결과 카드 Canvas 다운로드
- OG 이미지 API (
/api/og/:typeCode)
- peace/light 디자인 표준 적용
- auto-execute 파이프라인 검증 + 중복 plan add 수정
통합 및 검증
- i18n.js: 2068줄 → 5027줄 → 11635줄
- 16개 언어 × 164개 질문 × deep=true 전체 검증 통과
- 소넷 에이전트 총 19개 세션 활용 (번역 16 + 타입 3)
14차: SEO 발견성 완성 (자율 루프 iteration 9)
sitemap.xml — 19개 URL (메인/types/stats + 16개 유형 페이지)
robots.txt — 크롤 허용 + sitemap 참조, /api·/admin 차단
- MIME 맵에 .xml/.txt/.webmanifest 추가
/type/:code 라우트가 유형별 <title>·description도 주입
- 모듈 레벨 TYPE_NAMES_EN 맵 추가
13차: 공유 가능한 유형 페이지 (자율 루프 iteration 8)
GET /type/:code 라우트 — 유형별 OG 메타 주입 후 types.html 서빙
- types.html이
/type/CODE 경로도 인식 (딥링크)
- 상세 패널에 공유 버튼 (Web Share API + 클립보드 fallback)
/api/og/:code SVG OG 이미지 연결 (소셜 카드)
- 잘못된 코드 404, types.html 직접 접근 시 기본 OG 유지
12차: 결과 페이지 ↔ types.html 연동 (자율 루프 iteration 7)
- 결과 deep 섹션의 궁합 유형(best/challenging) → types.html 딥링크
- "16가지 유형 모두 둘러보기" CTA 추가 (4개 언어)
- 친구 궁합 결과의 유형 코드도 클릭 가능 링크로
- 모든 유형 멘션이 탐색 페이지로 연결되는 일관된 UX
11차: 16×16 유형 궁합 매트릭스 (자율 루프 iteration 6)
- stats.html에 256칸 히트맵 추가 — 모든 유형쌍 궁합 시각화
- 색상 보간(#EAE2D2→#A8874A)으로 궁합 점수 표현
- 클라이언트 compat 공식이 서버 computeCompatibility와 동일 (검증 완료)
- 칸 클릭 → 유형쌍 + 점수 + tier 표시
- 가로 스크롤 대응, EN/KO 라벨
10차: 16유형 탐색 페이지 (자율 루프 iteration 5)
public/types.html — 16유형 카탈로그 (카드 그리드 + 상세 패널)
- type-art.js SVG 아트 + i18n.js 유형 데이터 활용
- 상세: summary, growthPath(도구/스킬/팁), compatibility(궁합 유형 링크), career
?type= 딥링크, ?lang= 4개 언어(en/ko/ja/zh) 라벨
- 궁합 유형 클릭 → 해당 유형으로 이동
- 헤더에 유형 탐색 버튼 추가
9차: 공개 통계 대시보드 (자율 루프 iteration 4)
public/stats.html — 독립 통계 페이지 (peace/light 디자인 자립)
- 히어로 지표(프로필/평균신뢰도/유형수) + 유형분포·축평균·언어분포·추천순위
- 헤더에 통계 링크 버튼 추가 (현재 언어 파라미터 전달)
- EN/KO 라벨 인라인
- 버그 수정:
lang을 프로필 최상위에 저장 → langDistribution 정상 집계
8차: 타임라인 SVG 추이 차트 (자율 루프 iteration 3)
buildTimelineChart() — 4축 점수를 회차별 라인 차트로 (순수 SVG)
- 0 기준선, 자동 Y범위(maxAbs×1.15), 축별 색상 + 범례
- 기존 타임라인 텍스트 목록 위에 시각화 추가 — AMTI 추이차트 철학 반영
- 번역 불필요 (축코드/회차번호는 언어 무관)
7차: 백분위 포지셔닝 (자율 루프 iteration 2)
POST /api/percentile — 전체 응답자 대비 4축 백분위 (mid-rank 동점 처리)
latestScores()/latestConfidence() 헬퍼 — history[] + 레거시 포맷 모두 처리
/api/stats 버그 수정: 숫자형 confidence 미집계, scores 미집계 → history 기반 재계산
- 결과 페이지 백분위 카드 — 축별 트랙+마커, 표본 수 표시
- 저장 안 한 사용자도 동작 (scores만 전송)
- 3개 UI 문자열 16개 언어 (하이쿠 에이전트)
6차: 친구 궁합 체커 (자율 루프 iteration 1)
computeCompatibility() 헬퍼 추출 — 4축 가중치(0.3/0.25/0.25/0.2) 기반 점수
- 5단계 tier: mirror/high/balanced/complementary/contrasting
GET /api/match/:refA/:refB — referCode로 두 사람 궁합 조회
- 기존
/api/stats/compatibility 엔드포인트 헬퍼 사용으로 리팩토링
- 결과 페이지 궁합 카드: 게이지바, tier 라벨, 공유/보완 성향
- 버그 수정:
loadProfiles() 객체 포맷도 처리 (배열 강제 정규화)
- 19개 UI 문자열 16개 언어 (소넷 에이전트)
5차: AMTI 차용 — 타임라인 + 통합 페르소나
영감: amti.crowny.org (자매 서비스, 금융유형 트래커)
프로필 schema 확장: history[], takeCount, lastTaken, amtiRef
새 엔드포인트:
POST /api/profile/:refCode/retake — 재측정 누적, Δ 자동 계산
GET /api/profile/:refCode/timeline — 전체 이력 + 다음 체크업 권장일
GET /api/persona/:refCode — ABTI(4)+AMTI(4)=8글자 통합 페르소나
PATCH /api/profile/:refCode — amtiRef 연결
결과 페이지 UI:
타임라인 카드: 측정 횟수, 각 회차 타입 변화, Δ(HT/CP/LI/AV), 신뢰도 기반 체크업일 (80%+:90일, 60%+:60일, 그외:30일)
통합 페르소나 카드: ABTI+AMTI 8글자 코드, AMTI 미연동 시 입력 UI + amti.crowny.org 링크
HTTP cross-link: localhost:9813(AMTI)에서 실시간 조회
16개 언어 라벨 대응 (ko/ja/zh/en만 직접, 그 외 en fallback)관련 파일
/Users/ef/crowny-abti/public/js/i18n.js — 질문+타입 데이터 (12034줄)
/Users/ef/crowny-abti/public/js/app.js — 핵심 로직 (1632줄)
/Users/ef/crowny-abti/public/css/style.css — peace/light CSS (811줄)
/Users/ef/crowny-abti/server.js — Node 서버 (966줄, 포트 9811)
/Users/ef/crowny-abti/public/index.html — SPA 진입점
/Users/ef/crowny-abti/public/stats.html — 공개 통계 대시보드
/Users/ef/crowny-abti/public/types.html — 16유형 탐색 페이지
/Users/ef/crowny-abti/public/js/질문생성.한선 — 질문 생성 한선씨 동반
잔여 이슈