A seismograph for public opinion. PJQ measures how an audience actually received a piece of media — separating genuine opinion from fan noise, bots, and self-promoters.
Live: pjq.life · License: Apache-2.0
PJQ takes the URL of a piece of content (YouTube today; Reddit, Telegram, and
News next), samples the comments under it, and classifies every comment against
a 7-category stance rubric. The output is a verdict: a numeric reception
score (mood) plus a structured breakdown — how many people substantively
agreed, how many pushed back, how many stayed neutral, and how much noise is
drowning the signal.
Think of it as an observatory of media reception, exposed over two transports on one core:
- a REST API (
/api/v1/*) for analytics automation, and - an MCP server (
/mcp/) so AI agents (Claude Desktop and friends) can run analyses and read verdicts directly inside a chat.
This repo is the open client + specification of PJQ. The hosted analysis engine (sampling, classification, QA, the ONNX stance model and the prompt internals) stays closed — it is the product's moat. What's open here is everything you need to use, integrate with, and understand PJQ:
web/ — the full web client (React + TypeScript + Vite SPA, 5 languages)
spec/ — the conceptual specification
├── CONCEPT.md what PJQ is and why
├── RUBRIC.md the 7-category stance rubric (definitions)
├── domains.yaml the 11-domain content taxonomy
├── FEATURED.md the open, automatic showcase-ranking formula
└── verdict-schema.md the shape of a verdict (API output)
docs/ — integration reference
├── api-reference.md REST API surface
├── mcp-reference.md MCP tools and schemas
└── user-guide/ end-user guide (EN + RU)
Every comment gets exactly one of: SUP (substantive support), AGA (substantive against), NEU (neutral), OFF (off-topic), THIN (thin positive — praise without an argument), SUS (inorganic — bot / paid / coordinated), AGN (own agenda — the comment is a vehicle for the author's external goal).
Reporting rule: opinion metrics (mood, support) are computed strictly
from SUP / AGA / NEU. THIN / OFF / SUS / AGN are counted separately and never
inflate support percentages. See spec/RUBRIC.md.
The client is a standard Vite SPA. By default it talks to the hosted backend at
pjq.life (same-origin in production).
cd web
npm install
npm run dev # dev server with hot reload
npm run build # production build (with build-time SEO prerender) -> dist/To point the client at a different backend, copy web/.env.example and set
VITE_API_BASE.
- REST API — get an API key from the Cabinet on pjq.life,
then see
docs/api-reference.md. Read-only tools cost no credits; a full analysis costs one credit. - MCP — point an MCP-capable client at
https://pjq.life/mcp/and seedocs/mcp-reference.mdfor the exported tools.
Comment raw texts are never returned over the API — only aggregates, percentages, and a small set of representative exemplars, per PJQ's privacy policy.
PJQ is live and in active development. The roadmap is public at pjq.life/flightlog. This repository tracks the client and the spec; engine changes ship to the hosted service.
Copyright 2026 PJQ (github.com/Makaric). Licensed under the Apache License,
Version 2.0 — see LICENSE.
Русская версия: README_RU.md.