diff --git a/README.md b/README.md index 6ac3997..db04665 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,19 @@ 5. **Stage 3 — 투표** (큰 화면에 QR, 모바일 → `/?mode=vote`) 6. **시상** (`/?mode=ceremony&token=mlops2026`) -## 실행 — Docker (한 줄) +## 실행 — Docker + +```bash +./start.sh # LAN IP 자동 감지 + PUBLIC_BASE_URL 세팅 + 컨테이너 기동 +``` + +또는 raw 방식 (LAN IP 수동): + +```bash +PUBLIC_BASE_URL="http://192.168.0.47:8501" docker compose up -d --build +``` + +또는 최소 (LAN IP 없이, 어드민에서 나중에 override): ```bash docker compose up -d --build @@ -24,7 +36,7 @@ docker compose up -d --build docker compose down # 종료 (데이터 보존) ``` -**ADMIN_TOKEN**: `mlops2026` (외우기 쉬운 고정값). 변경하려면 `docker-compose.yml`의 `ADMIN_TOKEN:` 값 직접 수정 후 `docker compose up -d --build`. +**ADMIN_TOKEN**: `mlops2026` (외우기 쉬운 고정값). 변경하려면 `docker-compose.yml`의 `ADMIN_TOKEN:` 값 직접 수정 후 재기동. ## URL diff --git a/app.py b/app.py index ee4f6df..7ee5416 100644 --- a/app.py +++ b/app.py @@ -58,16 +58,16 @@ SHOW_CSS = """ .show-cat-card { border-radius: 14px; padding: 18px; - min-height: 480px; + min-height: 360px; } .show-cat-T1 { background: linear-gradient(135deg, #ffb84d, #ff8c00); color: #222; } .show-cat-T2 { background: linear-gradient(135deg, #4dffd2, #2a8e7e); color: #1a1a1a; } .show-cat-T3 { background: linear-gradient(135deg, #ff4d6d, #b83a55); color: white; } .show-cat-T4 { background: linear-gradient(135deg, #a64dff, #6a2eaf); color: white; } -.show-cat-title { font-size: 32px; font-weight: 800; margin-bottom: 4px; } -.show-cat-tagline { font-size: 16px; font-style: italic; margin-bottom: 4px; } +.show-cat-title { font-size: 36px; font-weight: 800; margin-bottom: 4px; } +.show-cat-tagline { font-size: 18px; font-style: italic; margin-bottom: 4px; } .show-cat-tone { font-size: 14px; opacity: 0.85; margin-bottom: 12px; } -.show-cat-item { font-size: 17px; line-height: 1.45; padding: 4px 0; } +.show-cat-item { font-size: 19px; line-height: 1.55; padding: 4px 0; } .show-vote-counter { font-size: 96px; text-align: center; font-weight: 900; padding: 16px 0; } .show-vote-caption { font-size: 36px; text-align: center; color: #555; padding: 12px 0; } @@ -468,6 +468,17 @@ def render_stage_vote(data): unsafe_allow_html=True, ) + votes = data.get("votes", []) + total = len(data.get("people", [])) + voted = len(votes) + pct = voted / total if total else 0 + + st.markdown( + f'