apps/velvet_trial)This document is a handoff guide for the Velvet Trial page.
velvet-trial/velvet-trial//kr/velvet-trial//en/velvet-trial//jp/velvet-trial//cn/velvet-trial//kr/velvet-trial/chapter-{chapterSn}/stage-{stageNum}//en/velvet-trial/chapter-{chapterSn}/stage-{stageNum}//jp/velvet-trial/chapter-{chapterSn}/stage-{stageNum}//cn/velvet-trial/chapter-{chapterSn}/stage-{stageNum}/Core app:
apps/velvet_trial/index.htmlapps/velvet_trial/css/style.cssapps/velvet_trial/js/config.jsapps/velvet_trial/js/i18n.jsapps/velvet_trial/js/data-loader.jsapps/velvet_trial/js/adapt-sprite.jsapps/velvet_trial/js/render.jsapps/velvet_trial/js/main.jsapps/velvet_trial/data/kr.jsonapps/velvet_trial/data/en.jsonapps/velvet_trial/data/jp.jsonapps/velvet_trial/data/cn.jsonapps/velvet_trial/data/recommendations/chapter-1/round-{levelSn}-{phase}.jsonapps/velvet_trial/data/recommendations/chapter-2/round-{levelSn}-{phase}.jsonapps/velvet_trial/data/recommendations/chapter-3/round-{levelSn}-{phase}.jsonapps/velvet_trial/data/recommendations/chapter-4/round-{levelSn}-{phase}.jsonapps/velvet_trial/data/recommendations/chapter-5/round-{levelSn}-{phase}.jsonPage include / SEO pages:
_includes/velvet-trial-body.htmlpages/velvet-trial/kr/index.htmlpages/velvet-trial/en/index.htmlpages/velvet-trial/jp/index.htmlpages/velvet-trial/cn/index.htmlpages/velvet-trial/{lang}/chapter-{chapterSn}/stage-{stageNum}.htmlData + SEO scripts:
scripts/velvet-trial/generate-velvet-trial-data.mjsscripts/velvet-trial/generate-velvet-trial-recommend-base.mjsscripts/seo/generate-velvet-trial-pages.mjsI18n packs:
i18n/pages/velvet-trial/kr.jsi18n/pages/velvet-trial/en.jsi18n/pages/velvet-trial/jp.jsi18n/pages/velvet-trial/cn.jsi18n/pages/velvet-trial/seo-meta.jsonScript responsibilities:
config.js: URL buildersi18n.js: language detection + translation lookupdata-loader.js: JSON fetch + cacheadapt-sprite.js: weakness/resistance sprite marksrender.js: tabs, levels, conditions, phases, monsters, recommendationsmain.js: initialize i18n, load data, render, SEO hookCurrent recommendation runtime model:
data/character_info.jsmedic, saboteur, assassin, guardian, strategist, sweeper, elucidator, virtuoso, otherVelvet trial core data source roots:
config_db/KR_Configconfig_db/EN_Configconfig_db/JP_Config_config/Config_CNGenerator:
scripts/velvet-trial/generate-velvet-trial-data.mjsOutput:
apps/velvet_trial/data/kr.jsonapps/velvet_trial/data/en.jsonapps/velvet_trial/data/jp.jsonapps/velvet_trial/data/cn.jsonDataset snapshot:
5140175Path:
apps/velvet_trial/data/recommendations/chapter-{chapterSn}/round-{levelSn}-{phase}.jsonRound file shape:
{
"chapterSn": 1,
"levelSn": 106,
"levelNum": 6,
"phase": 2,
"characters": ["Character A", "Character B"],
"personas": []
}
Manual entry rules:
characters / personas can contain:"Name String"{ "name": "Name" }{ "nameByLang": { "kr": "...", "en": "...", "jp": "..." } }elementKey and imageFile are optionalAuto resolution behavior:
character_info.js, so display name/image/meta are filled automatically.imageFile; renderer infers {name}.webp under assets/img/persona/.Script:
scripts/velvet-trial/generate-velvet-trial-recommend-base.mjsWhat it does:
apps/velvet_trial/data/kr.json and data/character_info.js175 files)characters by weakness analysis:personas array by defaultLegacy cleanup:
chapter-1.json and old recommendation-base files.Data:
npm run velvet-trial:data:generatenpm run velvet-trial:data:checkRecommendation rounds:
npm run velvet-trial:recommend-base:generatenpm run velvet-trial:recommend-base:checkSEO:
npm run seo:velvet-trial:generatenpm run seo:velvet-trial:checkWhen updating Velvet Trial raw content:
config_db/*npm run velvet-trial:data:generateWhen updating recommendation templates:
npm run velvet-trial:recommend-base:generateapps/velvet_trial/data/recommendations/chapter-{sn}/When changing UI:
apps/velvet_trial/js/render.jsapps/velvet_trial/css/style.csskr, en, jp, cn