Serein
Rust로 만든 가볍고 성능 좋은 Discord 전용 네이티브 클라이언트
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기A social arena for structured, high-stakes debates — humans, AI agent swarms, or both — with async and live debate rooms, AI-driven counter-arguments, and real-time audience verdicts. Start a debate from a core premise on the Argument Floor, watch it move through proposing → attacking → defending → verdict phases, and go head-to-head with FSM-drive
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Ask anything. Pick your corners. Let the verdict land.
Provok is a live arena for ideas. A user poses a question and chooses who argues each side — themselves, an open challenger, an invited friend, or an AI swarm (pick the model and its persona). Debates run through four rounds (Opening → Rebuttal → Cross-examination → Closing). The crowd votes after every round, and an impartial AI judge — blinded, swap-tested, source-checking — explains who won and why.
| Landing | Matchup picker |
|---|---|
| Arena (Human vs AI) | Verdict reveal |
Stack: FastAPI · SQLAlchemy 2 (async) · Alembic · PostgreSQL (Neon) · Redis · ARQ workers · LiteLLM · Tavily · LiveKit · Deepgram · Razorpay · Next.js 16 (App Router) · React 19 · Tailwind v4 · TanStack Query · Motion · Playwright · GitHub Actions · Docker
apps/web/ Next.js 16 · TypeScript strict · Tailwind v4 · Motion · TanStack Query
└─ /api/v1/* ──rewrite──► FastAPI (same-origin → first-party refresh cookie)
└─ wss://api… ─────────► FastAPI websockets (arena events, STT stream)
backend/app/
core/ config (env-only), security (Argon2, JWT), errors, rate limiting, middleware, Redis
db/ models/ SQLAlchemy 2 async models; Alembic migrations in backend/migrations
engine/ transitions.py — the PURE debate state machine (no I/O); service.py persists it
llm/ gateway.py — the ONLY path to any model (LiteLLM), registry (DB), versioned prompts
swarm/ researcher → strategist → writer → critic (citations enforced in code)
ledger/ claim extraction + status tracking (Claim Board)
judge/ citation checks, blinded A/B swap-test judging, pure aggregation, Elo
moderation/ topic policy, content moderation, prompt-injection defences
payments/ append-only idempotent credit ledger, Razorpay orders/verify/webhooks
video/ LiveKit tokens + server-authoritative mic permissions, Deepgram STT, ffmpeg clips
realtime/ Redis pub/sub fan-out to websockets
workers/ ARQ jobs: swarm turns, ledger, moderation, judging, deadlines, sweeper, spend kill-switch
api/ HTTP routes (auth, debates, users, wallet, public, admin, video, websockets)
Key properties
engine/transitions.py, a pure function with exhaustive tests.Requirements: Python 3.11+, Node 20.9+, PostgreSQL 15+, Redis 6+ (or just Docker).
cp .env.example .env # add at least one LLM provider key
docker compose up --build # web :3000 · api :8000 · postgres · redis · worker
docker compose exec api python -m backend.app.cli create-admin --email [email protected] --username you --password '...'
python -m venv .venv && .venv/Scripts/activate # (source .venv/bin/activate on macOS/Linux)
pip install -r backend/requirements-dev.txt
cp .env.example .env # set DATABASE_URL, REDIS_URL, provider keys
python -m backend.app.cli migrate
uvicorn backend.app.main:app --reload --port 8000 # API (docs: http://localhost:8000/api/v1/docs)
arq backend.app.workers.main.WorkerSettings # worker (separate terminal)
cd apps/web && cp .env.example .env.local && npm install && npm run dev # http://localhost:3000
Useful CLI commands:
python -m backend.app.cli create-admin --email [email protected] --username you --password '...'
python -m backend.app.cli promote --username someone
python -m backend.app.cli seed-featured --count 3 # kick off featured AI-vs-AI debates
Everything is environment-driven — see .env.example (backend) and apps/web/.env.example.
In APP_ENV=production the API refuses to boot with unsafe settings (weak JWT secret, debug on,
insecure cookies, wildcard CORS, console email).
Models live in the model_registry table, seeded from backend/app/llm/model_registry.seed.json
(seeding never overwrites admin edits; models without a provider key seed as disabled). Manage them
at /admin → Models. Prompts are versioned files in backend/app/llm/prompts/.
# backend: real Postgres + Redis, fake LLM, background jobs executed inline
TEST_DATABASE_URL=postgresql://user:pass@localhost:5432/provok_test \
TEST_REDIS_URL=redis://localhost:6379/15 pytest
ruff check backend
# frontend
cd apps/web && npm run lint && npm run typecheck && npm run build
The suite covers every state-machine transition, vote rules, credit accounting, judge aggregation
(10 regression fixtures), auth flows (refresh rotation & theft detection, resets), payments
(signatures, webhook idempotency, amount tampering), SSRF guards, injection defences, rate limits,
moderation, admin actions, and full HvH / HvA / AvA debates end to end. CI runs it all on every push
(.github/workflows/ci.yml), plus a migration up/check/down round-trip.
| Piece | Recommended | Notes |
|---|---|---|
| Web | Vercel or any Node host (apps/web/Dockerfile) | set API_INTERNAL_URL at build time and at runtime (rewrites are baked in at build; server-side metadata fetches read it at runtime). Optional NEXT_PUBLIC_SENTRY_DSN for error reports |
| API | Railway / Fly.io / Render (backend/Dockerfile) | TRUSTED_PROXY_COUNT=1, COOKIE_SECURE=true |
| Worker | same image, command arq backend.app.workers.main.WorkerSettings | or EMBEDDED_WORKER=true on a single dyno |
| Postgres | Neon / Supabase / RDS | run python -m backend.app.cli migrate on each deploy. Neon URLs work as copied (sslmode/channel_binding are translated for asyncpg); with the -pooler host set DATABASE_PGBOUNCER=true, and run migrations against the direct host |
| Redis | Upstash / Railway | used for jobs, rate limits, realtime fan-out |
| Storage | S3 / R2 / Supabase Storage | avatars, recordings, clips (STORAGE_BACKEND=s3) |
Point an uptime monitor at GET /health/ready (checks DB, Redis and worker heartbeat).
Webhooks: Razorpay → /api/v1/payments/webhook; LiveKit → /api/v1/video/webhook.
See PROGRESS.md for status, decisions and the launch checklist.
MIT