factcircuit
FactCircuit는 불변 출처와 단계별 검증, 제한된 검색, 재현 가능한 평가를 제공하는 감사 가능한 주장·증거 검증 루프입니다
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Warmane WotLK combat-log parser and leaderboard app for PizzaWarriors, with Skada-aligned raid reports, player pages, gear, roster, and admin tools.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Pizza Logs turns Wrath of the Lich King combat logs into readable raid sessions, boss pulls, DPS/HPS records, player profiles, gear snapshots, and progression summaries. It is built for PizzaWarriors on Warmane Lordaeron, while remaining useful for compatible WotLK 3.3.5a logs.
The Molten Charcoal identity pairs warm charcoal surfaces, ember-orange accents and cream text with the original Pizza Warriors crest. The site, install icons and shared-link previews use the same branding.README 전문 보기 ↗Pizza Logs turns Wrath of the Lich King combat logs into readable raid sessions, boss pulls, DPS/HPS records, player profiles, gear snapshots, and progression summaries. It is built for PizzaWarriors on Warmane Lordaeron, while remaining useful for compatible WotLK 3.3.5a logs.
The Molten Charcoal identity pairs warm charcoal surfaces, ember-orange accents and cream text with the original Pizza Warriors crest. The site, install icons and shared-link previews use the same branding.
Open the live app · Read the docs · Report a bug · Report a vulnerability privately
The 1.0.0 release contract defines the stable canonical product: supported report links, bounded uploads and documented parser metrics. It records compatibility commitments and known limits, including incomplete full UwU parity, reupload after interruption and owner-deferred provider recovery. The product version is independent of parser version 1.1.1; the release record and deployment checks establish which revision is live.
.txt, .log, or .zip uploads with live progress and bounded server-side validation.flowchart LR
Browser["Browser"] -->|"SSE upload and reports"| Web["Next.js web service"]
Web -->|"bounded byte stream"| Parser["FastAPI parser service"]
Parser -->|"validated analytics"| Web
Web <--> Database["PostgreSQL via Prisma"]
Web -->|"best-effort server fetch"| Warmane["Warmane Armory/CDN"]
Railway["Railway main deployment"] --> Web
Railway --> Parser
The browser never receives database credentials, parser filesystem paths, or the admin secret. Raw uploads are streamed through the web service, validated by the parser, reduced to structured analytics, and removed from parser temporary storage after processing.
| Layer | Technology |
|---|---|
| Web | Next.js 16.3, React 19.2, Node.js 24 |
| Language | TypeScript 7 native CLI plus TypeScript 6 ecosystem check |
| UI | Tailwind CSS 4, Recharts 3 |
| Data | PostgreSQL, Prisma 7 |
| Parser | Python 3.14, FastAPI, Pydantic |
| Hosting | Railway, separate web and parser services |
| Security automation | CodeQL, Dependabot, dependency review, pinned Actions |
Prerequisites:
Install the web dependencies and create local configuration:
npm ci --legacy-peer-deps
cp .env.example .env.local
npm run db:generate
npx prisma migrate deploy
npm run db:seed
Install the parser from the reviewed, hash-locked dependency set:
python -m venv parser/.venv
Install dependencies with the virtual environment's interpreter:
# Windows
.\parser\.venv\Scripts\python.exe -m pip install --require-hashes -r .\parser\requirements-dev.lock
# macOS/Linux
parser/.venv/bin/python -m pip install --require-hashes -r parser/requirements-dev.lock
Start the parser and web app in separate terminals:
# Windows
.\parser\.venv\Scripts\python.exe .\parser\main.py
# macOS/Linux
parser/.venv/bin/python parser/main.py
# Either platform, in the web-app terminal
npm run dev
Then open http://localhost:3000. A local production-style stack is also available:
Set a random ADMIN_SECRET of at least 32 characters in .env.local before starting Compose.
docker compose --env-file .env.local up --build
See development setup for database, item metadata, Windows launchers, and environment details.
| Variable | Required | Purpose |
|---|---|---|
DATABASE_URL | Yes | PostgreSQL connection used by Prisma |
PARSER_SERVICE_URL | Yes | Internal FastAPI service base URL |
ADMIN_SECRET | Yes for admin | Server-only signing/encryption key, at least 32 random characters; never a browser login credential |
ADMIN_AUTH_URL | Yes for admin | Exact public HTTPS origin; loopback HTTP is supported for isolated development |
ADMIN_COOKIE_SECURE | Local HTTP only | Set false only for local production-mode HTTP |
ENABLE_LEGACY_PARSER_ROUTES | No | Local parser compatibility escape hatch; disabled by default |
Never commit local .env files. The checked-in .env.example contains placeholders only.
Admin access uses an operator-provisioned account, an authenticator code and revocable sessions. Follow admin account setup and recovery before enabling it.
The complete web/TypeScript gate is:
npm run check:pr
The parser gate is:
cd parser
pytest tests/ -v
Parser behavior changes require focused pytest or fixture coverage. parser/tests/fixtures/README.md explains the fixture format. Useful additional checks are documented in testing.
Parser correctness is the product. The detailed contract lives in docs/parser-contract.md; the short version is:
| Route | Purpose |
|---|---|
/ | Upload and project summary |
/raids | Public raid history |
/raids/[report]/sessions/[date] | Canonical dated raid session |
/encounters/[id] | Boss-pull breakdown |
/leaderboards | Top-three all-time average DPS/HPS across logged boss attempts and per-boss personal-best kill records |
/players and /players/[name] | Player directory and profiles |
/guild-roster | Cached PizzaWarriors roster |
/weekly | Weekly kills and performance |
/bosses and /bosses/[slug] | Boss-specific history and rankings |
/admin | Authenticated diagnostics and maintenance |
Legacy numeric/CUID upload links redirect to canonical public raid URLs where a public report exists. The retired userscript update URLs remain inert only to safely disable old installations.
Use a short-lived branch from current origin/main, keep changes scoped, run the relevant gates, and open a pull request. Do not push directly to main. Parser, schema, upload, admin, security, and deployment changes need especially clear evidence.
See CONTRIBUTING.md and AGENTS.md.
Raid reports contain public in-game character names and performance data. Pizza Logs has no end-user account system, advertising SDK, or payment flow. Read PRIVACY.md for collection and retention details.
Please report vulnerabilities through a private GitHub security advisory, not a public issue. Security controls and known residual risks are documented in SECURITY.md.
The project is released under the MIT License. World of Warcraft and related marks are property of Blizzard Entertainment; Warmane and other referenced services are independent third parties. See THIRD_PARTY_NOTICES.md.