CoOp:Anything
Search any game and see how much of it you can play with friends: every co-op mod, its stage, quality and community rating.
브라우저에서 바로 즐기는 4지선다 상식 퀴즈. 한국사·과학·지리·일반상식·예술과문화 다섯 분야.
Translation pending
GamesJavaScript · PythonGitHub @perustOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
quiz by quiz — 빌드 도구 없는 순수 HTML/CSS/JS 4지선다 상식 퀴즈. 이전 React 버전은 legacy/ 에 보존
Translation pending
Taken from the repository README
Loading the full README.
Read the full README ↗브라우저에서 실행되는 4지선다 상식 퀴즈 게임. 한국사·과학·지리·일반상식·예술과문화 다섯 분야를 제공한다.
애플리케이션은 프레임워크와 번들러 없이 TypeScript를 tsc로 JavaScript에 컴파일한다.
브라우저 런타임 의존성은 없으며 생성된 js/는 커밋하지 않는다.
이전 React/TypeScript 구현은
legacy/에 보존되어 있으며 유지보수하지 않는다.
docs/question-bank-maintenance.md의 «받은 신고 처리»를 따른다.혼자 하기 랭킹은 이 브라우저에만 저장된다. 배포 사이트의 다른 사용자와 기록을 공유하지 않는다. 온라인 방에서 끝까지 푼 판은 서버가 채점한 점수로 온라인 랭킹에 남는다(아래 «온라인 멀티플레이»).
index.html의 quiz-api-base 메타 태그가 설정된 배포본은 온라인 방과 매치를
별도의 API에 연결한다. 이 경로에서는 서버 권위가 원칙이다. 서버가 문제 순서,
보기 순서, 정답, 점수, 마감, 준비 상태와 시작 조건을 결정하고, 브라우저는 서버가
돌려준 REST snapshot을 표시한다. WebSocket은 다시 읽어야 한다는 invalidation 신호와
인증된 참가자의 실시간 이동·채팅만 전달하며, 브라우저가 정답·점수·시간 초과를 판정하지
않는다. 이동·채팅의 발신자 신원은 client payload가 아니라 WebSocket ticket에서 정한다.
data/의 공개 문제는 정적 Pages와 로컬 싱글플레이용이다. 공개 data/는 온라인 정답
source가 아니다. 온라인 문제와 정답·해설은 API의 읽기 전용 비공개 은행에서만 제공된다.quiz.online.identity.v1와 마지막 닉네임을 localStorage에 보관한다. 닉네임은 같은
방 참가자와 서버에 표시될 수 있으므로 개인정보를 넣지 않는다.deploy/oracle/README.md).API가 설정되지 않은 독립 개발 문서와 단위 테스트에서는 로컬 방 구현을 쓴다. 네트워크 연결 실패를 로컬 방으로 조용히 대체하지 않는다. 같은 코드의 서로 다른 방이 생기는 것을 막기 위해서다.
Node.js 22와 Python 3 환경에서 다음을 실행한다.
npm ci
npm run build
npm run serve
http://localhost:8765로 접속한다. 소스를 수정하면서 컴파일하려면 별도 터미널에서
npm run watch를 실행한다.
index.html을 file://로 직접 열면 동작하지 않는다. 브라우저가 ES 모듈과 fetch를
제한하므로 반드시 HTTP 서버를 사용한다.
python3 tools/check_bank.py
python3 -m unittest discover -s tests -v
npm run check
npm run build
node --test tests/*.test.mjs
(cd server && uv run --locked ruff check app tests && uv run --locked python -m pytest -q)
docker build --target test --file server/Dockerfile .
tools/check_bank.py: 문제 JSON의 스키마, ID, 중복, 카테고리 동기화와 품질 경고를 검사한다.npm run check: TypeScript를 출력 없이 검사한다.문제 추가는 data/<카테고리>.json만 수정하고 애플리케이션 코드는 건드리지 않는다.
ID·스키마·사실 확인·중복 점검·검증 순서는
docs/question-bank-maintenance.md를 따른다.
최소 절차는 다음과 같다.
python3 tools/check_bank.py로 현재 은행이 정상인지 확인한다.특정 카테고리 문항을 사람이 검토하려면 다음처럼 출력할 수 있다.
python3 tools/check_bank.py --category 과학 --show-questions
index.html 화면별 <section data-screen="...">
css/style.css 구조·배치·동작 계약
css/voxel-theme.css 디자인 층: 토큰·아이콘·시각 언어 (docs/design-system.md)
src/constants.ts 제한 시간·출제 수·배점·카테고리 정의
src/characters.ts 선택 가능한 캐릭터
src/core/ DOM과 분리된 게임 규칙
src/ui/ DOM 렌더링
src/storage/ localStorage 어댑터
src/data/ JSON 로드와 런타임 검증
src/audio.ts Web Audio 효과음
src/app.ts 진입점
js/ tsc 생성물, Git에서 제외
data/<카테고리>.json 문제 은행
tools/check_bank.py 저장소 문제 은행 검증기
tests/ Python 검증기 회귀 테스트
로직과 화면을 나눈 것이 핵심 설계다. src/core/는 DOM을 직접 다루지 않는다.
랭킹 저장은 저장소 어댑터를 통해서만 접근하므로 서버 저장소로 바꿀 때 게임 규칙을 수정하지 않는다.
1–4로도 고른다.prefers-reduced-motion을 따른다.로컬 싱글플레이 기록과 사용자 설정은 localStorage에 남는다. 온라인 API가 설정된
배포본은 아래의 재접속 식별자와 닉네임을 서버 요청에 사용하며, 온라인 방·매치의
권위 상태는 서버에 있다.
| 키 | 내용 |
|---|---|
quiz.rankings | 로컬 싱글플레이 랭킹 기록 |
quiz.settings | 음소거·선택 캐릭터 |
quiz.nickname | 마지막 닉네임 |
quiz.recentQuestionIds | 최근 출제 문제 ID |
quiz.online.identity.v1 | 온라인 재접속용 임의 식별자 |
quiz.schemaVersion | 저장 데이터 스키마 버전 |
손상된 로컬 값은 정상 레코드만 살리고 나머지를 버린 뒤 빈 상태로 복구한다. 브라우저 저장소를 지우면 온라인 식별자가 새로 만들어져 기존 방 참가자로 이어지지 않을 수 있다.
.github/workflows/pages.yml은 main 푸시와 main 대상 pull request에서 공개 문제 은행,
TypeScript, Node 회귀, 서버 Ruff/pytest, Docker test stage를 검증한다. GitHub Pages
아티팩트와 실제 배포는 검증을 통과한 main에서만 만든다. 저장소 설정의
Settings → Pages → Source는 GitHub Actions를 사용한다.
정적 Pages 배포와 온라인 API 활성화는 별도 단계다. 온라인 API와 비공개 은행이
hash-verified 상태로 health check 되기 전에는 Pages에 API를 공개하는 변경을 병합하지
않는다. Oracle overlay의 운영 경계는 deploy/oracle/README.md를
따른다.
운영 감시는 둘이다. API는 개인 정보를 싣지 않는 한 줄 JSON 운영 기록(방·참가·판 사건, 처리하지 못한
오류, 5분 요약)을 컨테이너 stderr에 남기고, .github/workflows/uptime.yml이 15분마다 공개 API의
release gate와 Pages를 읽기만 해서 점검한다. 점검이 실패하면 «운영 경보» 이슈 하나를 열거나 거기에
덧붙이고 job을 실패시켜 GitHub이 실패 메일을 보낸다. 읽는 법과 남기지 않는 것은
deploy/oracle/README.md의 «Operational log and uptime monitor»를 따른다.
모든 웹 경로는 상대 경로라 https://<사용자>.github.io/<저장소>/ 같은 하위 경로에서도 동작한다.
fetch를 사용한다.localStorage 어댑터를 통해서만 한다. 온라인 권위 상태는 API가 맡는다.