From 50615e0069373b7e51c9a83d57d84f95ffd42845 Mon Sep 17 00:00:00 2001
From: th-kim0823
Date: Mon, 27 Apr 2026 20:31:24 +0900
Subject: [PATCH] =?UTF-8?q?fix:=20admin=20URL=20labels=20+=20topics-empty?=
=?UTF-8?q?=20=EC=95=88=EB=82=B4=EB=AC=B8=20+=20README=20=ED=85=8C?=
=?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EC=88=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Co-Authored-By: Claude Sonnet 4.6
---
README.md | 2 +-
app.py | 9 +++++++--
2 files changed, 8 insertions(+), 3 deletions(-)
diff --git a/README.md b/README.md
index a1a1325..6ac3997 100644
--- a/README.md
+++ b/README.md
@@ -86,7 +86,7 @@ docker cp tests/e2e.py hackathon-vote:/tmp/e2e.py
docker exec hackathon-vote python3 /tmp/e2e.py
```
-12개 시나리오 검증 (로드, 마감 토글, winner, priority, 동률, 추첨, UNIQUE, 제목, archive, atomic, clear).
+19개 시나리오 검증 (로드, 마감 토글, winner, priority, 동률, 추첨, UNIQUE, 제목, archive, atomic, clear).
## 시상 매핑
diff --git a/app.py b/app.py
index 30b6c00..3f29e0b 100644
--- a/app.py
+++ b/app.py
@@ -597,7 +597,8 @@ def render_admin():
with st.expander("🔗 다른 페이지 URL"):
st.markdown(
f"""
-- 👥 **참가자 투표**: [/](/)
+- 🖥 **큰 화면 (발표자)**: [/](/)
+- 📱 **모바일 투표 (QR target)**: [/?mode=vote](?mode=vote)
- 🎉 **시상식 (큰 화면)**: [/?mode=ceremony&token=...](?mode=ceremony&token={ADMIN_TOKEN})
- 📦 **JSON 원본 조회**: [/?mode=raw&token=...](?mode=raw&token={ADMIN_TOKEN})
@@ -688,7 +689,11 @@ def render_admin():
st.subheader("🗒 주제 편집")
cur_topics = get_topics()
if not cur_topics:
- st.warning("주제 시드 비어있음. 컨테이너 재시작 시 시드 자동 적용됨.")
+ st.warning(
+ "주제 비어있음. 어드민에서 직접 입력하거나, "
+ "데이터 파일을 통째로 재시드하려면: "
+ "`rm data/hackathon.json && docker compose restart vote`"
+ )
else:
edit_mode = st.radio(
"편집 모드", ["Form", "JSON 직접 편집"], horizontal=True, key="topics_mode"