From 0da9b92423607d1c39f458cb7d0473e39f291a30 Mon Sep 17 00:00:00 2001 From: Mina Choi Date: Mon, 14 Sep 2026 17:07:01 +0900 Subject: [PATCH] =?UTF-8?q?[feat]=20site/mockup:=20=EC=8B=9C=EC=97=B0?= =?UTF-8?q?=EB=B3=B8=20=EA=B0=B1=EC=8B=A0=20=E2=80=94=20=EC=A3=BC=EB=B3=80?= =?UTF-8?q?=20=EB=A7=9B=EC=A7=91=2031=EA=B3=B3=C2=B7=EA=B5=AD=EA=B0=80?= =?UTF-8?q?=EC=9C=A0=EC=82=B0=20=EC=95=BC=ED=96=89=C2=B7=EC=B0=A8=20?= =?UTF-8?q?=EB=8F=99=EC=84=A0=20=EB=B6=84=EA=B8=B0=C2=B7=EB=B2=88=EB=93=A4?= =?UTF-8?q?=20=EC=B5=9C=EC=8B=A0=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit /s/stay 시연본에 오늘 쌓인 변경을 한꺼번에 반영한다. 원본 8곳이 전부 467m 안이라 '걸어서 10분 이상' 탭의 맛집 칸이 비었던 것, xlsx 대조로 사이트에 없던 축제(국가유산 야행)가 빠져 있던 것, 차로 온 손님도 걸어온 손님과 같은 동선(짐 맡기고 저녁에 복귀)을 따르던 것, 번들이 2026-09-09 판이라 숙박 예약 섹션이 아예 안 그려지던 것 — 전부 발견한 순서대로 고쳤다. - patch_stay.py: 날짜 값(UPDATED_AT) 한 곳으로 모음 · 날씨 문구 케이스당 1개→5개 무작위 · '오늘의 엽서' 탭 비움(엽서 쓰기 섹션으로 대체) · 주변 맛집 8→31곳 + 사진 없는 집에 시연 전용 사진 채움 · 군산 국가유산 야행 추가(날짜 미확정이라 기간 값은 안 넣음) · 오늘의 한 장 탭 숨김 · 예약 섹션 켬 · head 메타의 날짜도 같이 갱신 · 번들을 최신 빌드로 교체하고 `` 보정(빠지면 카로셀 overflow 가 죽어 가로 스크롤이 생겼다) · 군산 읽기/엽서 카로셀에 쓸 embla-carousel UMD 번들 도입 - build_itinerary.py: 차로 온 손님의 마지막 날은 복귀 칸 없이 마지막 정거장에서 끝나도록 동선을 가름(도보 뼈대에서 복귀 칸만 떼어 파생 — 두 벌로 안 둔다) - build_story.py: 진희경은 익산 출생·군산에서 통학 — "군산 출신"으로 뭉뚱그리지 않게 정정 - fetch_restaurants.py · fill_restaurant_photos.py · restaurants.json · restaurant-photos.json · img/mirror/*: TourAPI 로 받은 맛집 31곳과, 사진 없는 집에 채운 시연 전용 사진(공공누리 아님 — 제품으로는 안 옮긴다) - vendor/: embla-carousel.umd.js 추가, 번들을 index-C3fFNl3r.css·index-DDxwteyn.js 로 교체하고 옛 파일은 vendor/retired/ 로 보관 - audit-all.mjs · audit_schedule.py · SCHEDULE.md: 위 변경에 맞춘 점검 항목·산출물 갱신 - AUTOPLAY.md: 새로고침 직후 배경음악 자동재생을 시도한 것과 실측값 — 사람 입력 없이는 브라우저가 막아서 안 된다는 결론 기록 검증: `python3 patch_stay.py` 정상 종료, 킹서버 반영 후 md5 대조. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01XYUb8ZfNiDd15tZRYrusCX --- solution/site/scripts/mockup/AUTOPLAY.md | 146 ++++++++ solution/site/scripts/mockup/SCHEDULE.md | 51 +-- solution/site/scripts/mockup/audit-all.mjs | 80 ++++- .../site/scripts/mockup/audit_schedule.py | 22 +- .../site/scripts/mockup/build_itinerary.py | 90 +++-- solution/site/scripts/mockup/build_story.py | 3 + .../site/scripts/mockup/fetch_restaurants.py | 99 +++++ .../scripts/mockup/fill_restaurant_photos.py | 47 +++ .../mockup/img/mirror/00a8ac4ce017fb12.jpg | Bin 0 -> 240827 bytes .../mockup/img/mirror/067f6fe42c045a3a.jpg | Bin 0 -> 107679 bytes .../mockup/img/mirror/087900c82da3b2f5.jpg | Bin 0 -> 633497 bytes .../mockup/img/mirror/1302460cb149975f.jpg | Bin 0 -> 468081 bytes .../mockup/img/mirror/24043ae4f5854f96.jpg | Bin 0 -> 462861 bytes .../mockup/img/mirror/3e5b3daae33ea51c.jpg | Bin 0 -> 501808 bytes .../mockup/img/mirror/42e8d872198edaa9.jpg | Bin 0 -> 532358 bytes .../mockup/img/mirror/483f52c2d2b7eebe.jpg | Bin 0 -> 170709 bytes .../mockup/img/mirror/55f57f45fcebb460.jpg | Bin 0 -> 122481 bytes .../mockup/img/mirror/5f92192c7b3e2cbf.jpg | Bin 0 -> 158390 bytes .../mockup/img/mirror/6102b164464dbfa4.jpg | Bin 0 -> 106497 bytes .../mockup/img/mirror/81438670a5485351.jpg | Bin 0 -> 493475 bytes .../mockup/img/mirror/81bd76fa51ae9ad1.jpg | Bin 0 -> 496712 bytes .../mockup/img/mirror/83766fa52745ef37.jpg | Bin 0 -> 542069 bytes .../mockup/img/mirror/92cb907d07db9953.jpg | Bin 0 -> 377495 bytes .../mockup/img/mirror/93146c8ae53252ff.jpg | Bin 0 -> 428262 bytes .../mockup/img/mirror/98539e6361e317b1.jpg | Bin 0 -> 365343 bytes .../mockup/img/mirror/aebe437fd281f9ad.jpg | Bin 0 -> 429863 bytes .../mockup/img/mirror/b3518ee8ef2b4aac.png | Bin 0 -> 1989888 bytes .../mockup/img/mirror/bf6bb6183c6f6246.jpg | Bin 0 -> 122987 bytes .../mockup/img/mirror/de286714af7faaba.jpg | Bin 0 -> 556806 bytes .../mockup/img/mirror/e13c8a2a1aa2762c.jpg | Bin 0 -> 445999 bytes .../mockup/img/mirror/f9cb7e88415edd06.jpg | Bin 0 -> 367208 bytes solution/site/scripts/mockup/patch_stay.py | 238 +++++++++++- .../scripts/mockup/restaurant-photos.json | 57 +++ solution/site/scripts/mockup/restaurants.json | 239 ++++++++++++ .../mockup/vendor/embla-carousel.umd.js | 1 + .../scripts/mockup/vendor/index-C3fFNl3r.css | 1 + .../scripts/mockup/vendor/index-DDxwteyn.js | 340 ++++++++++++++++++ .../scripts/mockup/vendor/retired/README.md | 22 ++ .../vendor/{ => retired}/index-DUeGvBPS.js | 0 .../vendor/{ => retired}/index-k3f3eOzb.css | 0 40 files changed, 1370 insertions(+), 66 deletions(-) create mode 100644 solution/site/scripts/mockup/AUTOPLAY.md create mode 100644 solution/site/scripts/mockup/fetch_restaurants.py create mode 100644 solution/site/scripts/mockup/fill_restaurant_photos.py create mode 100644 solution/site/scripts/mockup/img/mirror/00a8ac4ce017fb12.jpg create mode 100644 solution/site/scripts/mockup/img/mirror/067f6fe42c045a3a.jpg create mode 100644 solution/site/scripts/mockup/img/mirror/087900c82da3b2f5.jpg create mode 100644 solution/site/scripts/mockup/img/mirror/1302460cb149975f.jpg create mode 100644 solution/site/scripts/mockup/img/mirror/24043ae4f5854f96.jpg create mode 100644 solution/site/scripts/mockup/img/mirror/3e5b3daae33ea51c.jpg create mode 100644 solution/site/scripts/mockup/img/mirror/42e8d872198edaa9.jpg create mode 100644 solution/site/scripts/mockup/img/mirror/483f52c2d2b7eebe.jpg create mode 100644 solution/site/scripts/mockup/img/mirror/55f57f45fcebb460.jpg create mode 100644 solution/site/scripts/mockup/img/mirror/5f92192c7b3e2cbf.jpg create mode 100644 solution/site/scripts/mockup/img/mirror/6102b164464dbfa4.jpg create mode 100644 solution/site/scripts/mockup/img/mirror/81438670a5485351.jpg create mode 100644 solution/site/scripts/mockup/img/mirror/81bd76fa51ae9ad1.jpg create mode 100644 solution/site/scripts/mockup/img/mirror/83766fa52745ef37.jpg create mode 100644 solution/site/scripts/mockup/img/mirror/92cb907d07db9953.jpg create mode 100644 solution/site/scripts/mockup/img/mirror/93146c8ae53252ff.jpg create mode 100644 solution/site/scripts/mockup/img/mirror/98539e6361e317b1.jpg create mode 100644 solution/site/scripts/mockup/img/mirror/aebe437fd281f9ad.jpg create mode 100644 solution/site/scripts/mockup/img/mirror/b3518ee8ef2b4aac.png create mode 100644 solution/site/scripts/mockup/img/mirror/bf6bb6183c6f6246.jpg create mode 100644 solution/site/scripts/mockup/img/mirror/de286714af7faaba.jpg create mode 100644 solution/site/scripts/mockup/img/mirror/e13c8a2a1aa2762c.jpg create mode 100644 solution/site/scripts/mockup/img/mirror/f9cb7e88415edd06.jpg create mode 100644 solution/site/scripts/mockup/restaurant-photos.json create mode 100644 solution/site/scripts/mockup/restaurants.json create mode 100644 solution/site/scripts/mockup/vendor/embla-carousel.umd.js create mode 100644 solution/site/scripts/mockup/vendor/index-C3fFNl3r.css create mode 100644 solution/site/scripts/mockup/vendor/index-DDxwteyn.js create mode 100644 solution/site/scripts/mockup/vendor/retired/README.md rename solution/site/scripts/mockup/vendor/{ => retired}/index-DUeGvBPS.js (100%) rename solution/site/scripts/mockup/vendor/{ => retired}/index-k3f3eOzb.css (100%) diff --git a/solution/site/scripts/mockup/AUTOPLAY.md b/solution/site/scripts/mockup/AUTOPLAY.md new file mode 100644 index 0000000..e06c3aa --- /dev/null +++ b/solution/site/scripts/mockup/AUTOPLAY.md @@ -0,0 +1,146 @@ +# 자동재생 — 안 된다. 왜 안 되는지와, 그래서 뭘 했는지 + +`/s/stay` 배경음악을 **새로고침 직후 바로** 나게 하려고 시도한 것 전부와 실측값이다. +같은 얘기가 다시 나오면 이 파일부터 본다. + +측정: 2026-09-14 · 킹서버 `https://web4ai.o2osolution.ai/s/stay` · Chrome(정식 채널) + +--- + +## 결론 + +**브라우저에서 첫 방문에 소리가 저절로 나게 하는 방법은 없다.** +사람 손 입력(`isTrusted: true`) 없이는 크롬이 `play()` 를 `NotAllowedError` 로 거절한다. +자바스크립트로 그 검사를 통과시키는 길은 없고, 그건 우회 대상이 아니라 +**그 우회를 막으려고 만들어진 검사**다. + +지금 동작: **손님이 화면에 처음 닿으면(클릭·탭·키) 켜진다.** 그 이상은 어떤 사이트도 못 한다. + +### 해 본 것과 결과 + +| 시도 | 결과 | +|---|---| +| 로드 즉시 `audio.play()` | `NotAllowedError` | +| 무음(`muted=true`)으로 시작 → 나중에 unmute | `NotAllowedError` (무음도 거절된다) | +| `