From 067e25116a65140d24382afb746caae3bcec723f Mon Sep 17 00:00:00 2001 From: th-kim0823 Date: Sun, 26 Apr 2026 18:35:15 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20admin=20URL=20=EC=89=BD=EA=B2=8C=20?= =?UTF-8?q?=EC=A0=91=EA=B7=BC=20-=20show-urls.sh=20+=20admin=20=EB=82=B4?= =?UTF-8?q?=EB=B6=80=20=EB=A7=81=ED=81=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - show-urls.sh: localhost + LAN IP 포함 모든 URL 출력 (참가자/어드민/시상식) - admin 페이지에 다른 페이지 URL expander 추가 (ceremony 링크 클릭 가능) - README에 사용법 추가 Co-Authored-By: Claude Opus 4.7 (1M context) --- README.md | 10 ++++++++++ app.py | 13 +++++++++++++ show-urls.sh | 37 +++++++++++++++++++++++++++++++++++++ 3 files changed, 60 insertions(+) create mode 100755 show-urls.sh diff --git a/README.md b/README.md index fb65ba3..14a1a14 100644 --- a/README.md +++ b/README.md @@ -30,10 +30,20 @@ docker compose down ## URL +```bash +./show-urls.sh # localhost + LAN IP 포함 모든 URL 출력 +``` + - 투표: `http://<서버>:8501/` - 어드민: `http://<서버>:8501/?mode=admin&token=` - 시상식: `http://<서버>:8501/?mode=ceremony&token=` +macOS 빠른 열기: +```bash +TOKEN=$(grep ADMIN_TOKEN .env | cut -d= -f2) +open "http://localhost:8501/?mode=admin&token=${TOKEN}" +``` + ## 데이터 파일 — `hackathon.json` ```json diff --git a/app.py b/app.py index 2e1e7da..dada87b 100644 --- a/app.py +++ b/app.py @@ -355,6 +355,19 @@ def render_admin(): st.title("🔐 진행자 콘솔") + with st.expander("🔗 다른 페이지 URL"): + st.markdown( + f""" +- 👥 **참가자 투표**: [/](/) +- 🎉 **시상식 (큰 화면)**: [/?mode=ceremony&token=...](?mode=ceremony&token={ADMIN_TOKEN}) + +호스트에서 LAN IP 포함 모든 URL 보기: +```bash +./show-urls.sh +``` + """ + ) + voting_open = is_voting_open() cur_label = "🟢 투표 진행 중" if voting_open else "🔴 투표 마감됨" st.markdown(f"### 투표 상태: {cur_label}") diff --git a/show-urls.sh b/show-urls.sh new file mode 100755 index 0000000..d6ad853 --- /dev/null +++ b/show-urls.sh @@ -0,0 +1,37 @@ +#!/bin/bash +# 해커톤 투표 URL 출력 (호스트에서 실행) +set -euo pipefail +cd "$(dirname "$0")" + +if [[ ! -f .env ]]; then + echo "❌ .env 파일 없음. 먼저 'cp .env.example .env' 후 ADMIN_TOKEN 설정." + exit 1 +fi + +TOKEN=$(grep -E "^ADMIN_TOKEN=" .env | head -1 | cut -d= -f2- | tr -d '"') +PORT=$(grep -E "^PORT=" .env 2>/dev/null | head -1 | cut -d= -f2- | tr -d '"' || echo "") +PORT=${PORT:-8501} + +# LAN IP 자동 감지 (macOS/Linux) +LAN_IP=$(ipconfig getifaddr en0 2>/dev/null || ip -4 addr show 2>/dev/null | grep -oP '(?<=inet\s)\d+(\.\d+){3}' | grep -v '^127\.' | head -1 || echo "") + +echo "============================================" +echo " 해커톤 투표 URL" +echo "============================================" +echo +echo "👥 참가자 투표:" +echo " http://localhost:${PORT}/" +[[ -n "$LAN_IP" ]] && echo " http://${LAN_IP}:${PORT}/ (LAN)" +echo +echo "🔐 진행자 어드민:" +echo " http://localhost:${PORT}/?mode=admin&token=${TOKEN}" +[[ -n "$LAN_IP" ]] && echo " http://${LAN_IP}:${PORT}/?mode=admin&token=${TOKEN}" +echo +echo "🎉 시상식 (큰 화면):" +echo " http://localhost:${PORT}/?mode=ceremony&token=${TOKEN}" +[[ -n "$LAN_IP" ]] && echo " http://${LAN_IP}:${PORT}/?mode=ceremony&token=${TOKEN}" +echo +echo "============================================" +echo " 팁: 'open' 으로 바로 브라우저 열기 (macOS)" +echo " open \"http://localhost:${PORT}/?mode=admin&token=${TOKEN}\"" +echo "============================================"