{"id":51436820,"url":"https://github.com/claude-code-expert/lucky-draw","last_synced_at":"2026-07-05T07:07:31.211Z","repository":{"id":364496385,"uuid":"1268081288","full_name":"claude-code-expert/lucky-draw","owner":"claude-code-expert","description":"럭키 드로우 웹 페이지 ","archived":false,"fork":false,"pushed_at":"2026-06-13T07:39:39.000Z","size":40,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-13T09:23:07.430Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/claude-code-expert.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-13T05:54:28.000Z","updated_at":"2026-06-13T07:39:43.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/claude-code-expert/lucky-draw","commit_stats":null,"previous_names":["claude-code-expert/lucky-draw"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/claude-code-expert/lucky-draw","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/claude-code-expert%2Flucky-draw","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/claude-code-expert%2Flucky-draw/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/claude-code-expert%2Flucky-draw/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/claude-code-expert%2Flucky-draw/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/claude-code-expert","download_url":"https://codeload.github.com/claude-code-expert/lucky-draw/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/claude-code-expert%2Flucky-draw/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35146124,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-05T02:00:06.290Z","response_time":100,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-07-05T07:07:28.512Z","updated_at":"2026-07-05T07:07:30.558Z","avatar_url":"https://github.com/claude-code-expert.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# lucky-draw\n\n참가자 명단과 경품을 입력하고 원판을 돌려 당첨자를 정하는 추첨 웹 앱. 행사장 대형 화면 투사를 가정한 무서버 정적 SPA입니다.\n\n- **결과는 회전과 독립**: 무작위 결과를 먼저 정하고 그 칸에 멈추도록 회전 각도를 역산해, 연출로 결과를 조작할 수 없습니다.\n- **공정성**: 모든 섹터 등확률(`1 / 슬롯수`). 슬롯 = 남은 경품 + 꽝 1칸이라, 경품이 줄수록 꽝 확률이 자연히 오릅니다.\n- **무서버**: 외부 API·네트워크 의존 없이 정적 호스팅으로 동작합니다.\n\n## 주요 기능\n\n- 참가자 입력: 이름(줄바꿈/쉼표 구분) 또는 인원 수(1~N 자동 생성), 중복 경고\n- 경품 입력: 한 줄당 1개\n- 당첨 처리: 경품 소진·참가자 제외(중복 수령 금지)·원판 재배치(셔플)\n- 꽝 정책: 기본 잔류 / \"꽝도 1회만\" 모드(즉시 제외) 선택\n- 참가자 선택: 자동(무작위) 또는 수동\n- 실시간 당첨자 명단, 남은 참가자·경품·라운드 현황, CSV 내보내기\n- localStorage 상태 보존(새로고침 복원), 슬롯 24개 초과 시 번호 모드 + 범례\n\n## 기술 스택\n\n순수 HTML + TypeScript + SVG. **번들러 없음** — `tsc`가 `src/*.ts`를 `dist/*.js`로 컴파일하고 브라우저가 네이티브 ES 모듈로 직접 로드합니다.\n\n## 실행 방법\n\n사전 준비: Node.js(npm 포함)와 Python 3.\n\n```bash\n# 1. 의존성 설치 (TypeScript)\nnpm install\n\n# 2. 빌드 (src/*.ts → dist/*.js)\nnpm run build\n\n# 3. 정적 서버 실행\nnpm run serve\n```\n\n브라우저에서 **http://localhost:5173** 접속.\n\n### 개발 중(자동 컴파일 + 서버)\n\n코드를 고치며 작업할 때는 두 터미널에서 각각 실행하세요.\n\n```bash\nnpm run watch    # 터미널 1: 파일 변경 시 자동 컴파일(tsc --watch)\nnpm run serve    # 터미널 2: 정적 서버\n```\n\n### 배포\n\n빌드 후 `index.html` + `styles.css` + `dist/` 를 정적 호스팅에 그대로 올리면 됩니다.\n\n## 프로젝트 구조\n\n```\nindex.html          진입점 (dist/main.js 로드)\nstyles.css          디자인(무채색 + 액센트 1색)\nsrc/\n  types.ts          데이터 모델\n  draw.ts           추첨 계산(순수 함수): 슬롯 구성·셔플·결과 선차 선택\n  state.ts          상태 기계: 전이·파생 선택자·종료 조건\n  wheel.ts          SVG 원판 + 회전 각도 역산 애니메이션\n  ui.ts             화면 렌더 + 이벤트 배선\n  main.ts           컨트롤러: 상태 소유 + 회전 흐름 조율\n  storage.ts        localStorage 보존\n```\n\n## 문서\n\n- [Requirement.md](Requirement.md) — 요구사항 정의서(원본 설계)\n- [개발-과정-요약.md](개발-과정-요약.md) — 초보자용 개발 과정 요약(파일별 역할·호출관계 포함)\n- [CLAUDE.md](CLAUDE.md) — 개발 가이드(아키텍처·불변식·주의점)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fclaude-code-expert%2Flucky-draw","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fclaude-code-expert%2Flucky-draw","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fclaude-code-expert%2Flucky-draw/lists"}