Phase 2 ํ์. ์ฌ์ฉ์ ๋ช ๋ น(์์๊ด๋ฆฌ์) ๊ธฐ๋ฐ 10 ํ๋ณด ์ค 7๊ฐ ์์จ ์งํ (Cloudflare DNS / ์นด์นด์คยทWeChatยทLINE ๊ณต์ ์ฑ๋ ๋ฐ๊ธ / Case Study ์ค ๋ฐ์ดํฐ๋ ์ฌ์ฉ์ ์ก์ ). 8 task ๋ชจ๋ PASS โ Tailwind preflight ๋นํ์ฑ, AVIF ๋ณํ, Partner ๋ค๊ตญ์ด, ๋ฉ์ธ ํ์ด์ง prerender, A/B framework, Inquiry CRM, ๋ถ์ ๋์๋ณด๋ + E2E ๊ฒ์ฆ.
| ํญ๋ชฉ | ๊ฒฐ๊ณผ |
|---|---|
| Tailwind preflight ๋นํ์ฑ | 125โ160KB (์์ ์ฑ ํ๋ณด) / gzip ~17KB (CDN ๋ฌด์ ํ ๋๋น 95%+ ์ ๊ฐ) |
| AVIF ๋ณํ | 63์ฅ / 51% ์ ๊ฐ (jpg 6.78MB โ avif 3.34MB, WebP 36% ๋๋น +15%) |
| 246 picture/source ์๋ ์ ์ฉ | image/avif โ image/webp โ jpg fallback ์ฒด์ธ |
| Partner ๋ค๊ตญ์ด | ko/zh/en 3 ํ์ด์ง + URL /partners/<token>/<lang> |
| ๋ฉ์ธ ํ์ด์ง prerender | ko/zh/en 3 ์ ์ (๊ฐ ~125KB, ๋์ 149KB ๋๋น -16%) |
| A/B framework | starium_ab_assignments + POST /api/ab-assign (sha256 50/50) + replay ์ฒ๋ฆฌ + CEO conversion ๋น๊ต |
| Inquiry CRM | starium_global_inquiries +status/replied_at/auto_reply +3 admin endpoint |
| Admin Dashboard | /starium-global/admin (CEO ์ธ์ฆ) + 4 stats + Top Pages + Inquiries Queue + Partner ๊ด๋ฆฌ + Events ์๊ฐํ |
| sitemap.xml | 48 URLs (๋ฉ์ธ 1 + ๋ฉ์ธ prerender 3 + ๋์ 11 + ์ธ์ด๋ณ 33) |
| ํ์ด์ง ์ดํฉ | 53 ํ์ด์ง (์ด์ 46 โ +7: ๋ฉ์ธ prerender 3 + Partner ๋ค๊ตญ์ด 3 + Admin 1) |
| ํธ๋ ์ด๋ฉ / ์๋น์ค | ๋ชจ๋ active |
corePlugins.preflight=false + ๋ชจ๋ ํ์ด์ง (๋ฉ์ธ/11ํ๋ก๊ทธ๋จ/33prerender/partner/admin) content scan ์ถ๊ฐ โ 160KB minified, gzip 17KB (CDN ๋ฌด์ ํ ๋๋น 95%+ ๊ฒฝ๋ํ)apt install libavif-bin + avifenc -q 60 -s 6 ๋ณ๋ ฌ 8 worker โ 6.78โ3.34MB (-51%) + 246 picture์ <source type="image/avif"> ์๋ ์ถ๊ฐ/partners/<token>/<lang> ๋ผ์ฐํธ (DB ํ ํฐ ๊ฒ์ฆ ๋์ผ)starium_ab_assignments ํ
์ด๋ธ (visitor_id ร experiment_key UNIQUE)/starium-global/api/ab-assign โ sha256(visitor:exp)[0]%2 50/50 ๋ถ๋ฐฐ + replay (๊ธฐ์กด ๋ถ๋ฐฐ ์ฐ์ )/api/starium-global/ab-results?experiment_key=X (CEO) โ assignment count + variant๋ณ event count{experiment, variant} ์ฒจ๋ถ/api/starium-global/inquiries?status=X (CEO) โ list + ํํฐ/api/starium-global/inquiries/:id (CEO) โ status ๋ณ๊ฒฝ/api/starium-global/inquiries/stats (CEO) โ by_status ์ง๊ณ๊ฒฝ๋ก: /starium-global/admin (CEO ์ธ์ฆ, no-auth ์ inline ๋ก๊ทธ์ธ ํผ 1041B โ ์ ์ ์ธ์ฆ ์ 9419B ๋์๋ณด๋)
/starium-global/{ko,zh,en}/index.html/starium-global/partners/{ko,zh,en}.html/starium-global/admin/index.html/starium-global/assets/gallery/*.avif/opt/star365-ceo/server.mjs: +์ธ์ด๋ณ ๋ฉ์ธ ๋ผ์ฐํธ + admin ๋ผ์ฐํธ + inquiries CRM 3 endpoint + A/B 2 endpoint + partners ๋ค๊ตญ์ด ๋ผ์ฐํธ + sitemap 48 URLs (+200 LOC)/starium-global/assets/tw.min.css: preflight ๋นํ์ฑ ํ ์ฌ๋น๋/tmp/sg-build/tailwind/tailwind.config.js: content + safelist + preflight falsestarium_global_inquiries: +status/replied_at/reply_note/auto_reply_sent_at ์ปฌ๋ผ + sgi_status_idxstarium_ab_assignments (์ ๊ท ํ
์ด๋ธ, visitor ร experiment UNIQUE)https://ceo.star365.site/starium-global/admin
โ CEO Login ํผ โ CEO_KEY ์
๋ ฅ โ ์๋ cookie ์ค์ โ ๋์๋ณด๋ ์ง์
// ํด๋ผ์ด์ธํธ (๋ฉ์ธ ํ์ด์ง ์ถ๊ฐ)
const visitor_id = sessionStorage.getItem('sg-sid');
const r = await fetch('/starium-global/api/ab-assign', {
method: 'POST', headers: {'content-type': 'application/json'},
body: JSON.stringify({visitor_id, experiment_key: 'hero_cta_v1'})
});
const {variant} = await r.json();
if (variant === 'B') document.querySelector('h1').textContent = '์ ๊ท ์นดํผ';
// ์ด๋ฒคํธ ์ถ์ ์ variant ์ฒจ๋ถ
STARIUM_TRACK('inquiry_submit', {experiment: 'hero_cta_v1', variant});
# ๊ฒฐ๊ณผ ์กฐํ (CEO)
CEO_KEY=$(cat /root/.ceo_access_key)
curl -sk -H "X-CEO-Key: $CEO_KEY" "https://ceo.star365.site/api/starium-global/ab-results?experiment_key=hero_cta_v1"
CEO_KEY=$(cat /root/.ceo_access_key)
# new ํ
curl -sk -H "X-CEO-Key: $CEO_KEY" "https://ceo.star365.site/api/starium-global/inquiries?status=new"
# ๋ต๋ณ ์ฒ๋ฆฌ
curl -sk -X PATCH -H "X-CEO-Key: $CEO_KEY" -H 'Content-Type: application/json' \
-d '{"status":"replied","reply_note":"์นด์นด์คํก์ผ๋ก ๋ต๋ณ ๋ฐ์ก"}' \
"https://ceo.star365.site/api/starium-global/inquiries/42"
/opt/star365-hq/docs/04-report/starium-global-phase3-20260509.md (ํ ํ์ผ)starium-global-phase3-20260509.md