Projects

Project · Live

Jiddu

Truth is a pathless land. Jiddu is three tools in one for reading any text critically — a fallacy detector, a fact-check pipeline, and a neutrality assessment. Drop a URL, paste text, or upload a PDF and get a structured read on how the piece argues, what it claims, and how it frames its sources.

Jiddu homepage at jiddu.app: dark UI with the headline 'Read any text with a critical mind in the margin.' The composer below has tabs for Fallacy detector / Fact-check / Neutrality, input options for URL, paste text, PDF/TXT, or live audio, and a model picker between GPT-5.4 mini and MiniMax M2.7.

What it does

  1. Fallacy detector. Highlights every passage that contains a logical fallacy, explains each in a Word-style margin comment, and assigns the whole piece a fallacy score from 0 to 100. Streams results progressively while the LLM is still writing. 28-fallacy catalog with a per-fallacy modal and a guide page at /fallacies.
  2. Fact-check. Pulls every verifiable claim (numbers, dates, quotes, causal and categorical assertions) out of the same text using a Claimify-style 4-stage pipeline. Each claim can then be sent through Perplexity Sonar Reasoning Pro for a verdict — supported / contradicted / mixed / unverified — with citations classified into a 6-tier source-quality taxonomy.
  3. Neutrality assessment. Flags the framing, attribution and source-selection patterns that make a text partisan even when it doesn't commit any explicit fallacy and doesn't lie about facts. Eight issue types: loaded language, asymmetric attribution, false equivalence, selective omission, source asymmetry, both-sidesing, steering, genetic framing. Deliberately does not classify partisan direction — surfaces patterns the reader can audit.

Methodology

The fact-check and neutrality pipelines are grounded in two recent papers:

  • Claimify (Metropolitansky & Larson, Microsoft Research 2025) for the 4-stage claim extraction.
  • Distilling Expert Judgment at Scale (Goldfarb, Hall, Fisher, Salam, Wilde — Forum AI / Stanford 2025) for the verdict assessment, the 6-tier source-quality taxonomy, and the neutrality framework.

Jiddu is not affiliated with either group.

Stack

  • Next.js 16 (App Router, Turbopack) + React 19 + TypeScript + Tailwind 4.
  • Prisma 7 with @prisma/adapter-better-sqlite3 — SQLite file persisted in a Docker volume.
  • Multi-model via OpenRouter: GPT-5.4 mini as default, MiniMax M2.7 as a one-click alternative, Sonar Reasoning Pro for fact-check verification. Client-side fallback retries across the model chain if no SSE events have been emitted yet.
  • Streaming via server-side ReadableStream emitting SSE; partial-json for incremental finding extraction so comments appear as the model writes them.
  • Trilingual UI (EN / PT-BR / ES) with browser-language detection on first visit and localStorage persistence — the LLM is also instructed to write in the chosen language.

Things worth noting

  • Verdict cache with per-type TTL. Claims are hashed (lang-prefixed sha256 of the normalized statement) and persisted. Numeric claims expire after 30 days, quotes and causal claims after 90, dates and categorical claims after 365. Re-verification is free for cached claims.
  • SSRF-protected URL ingestion. Every fetch hop is DNS-resolved and rejected if it lands on RFC1918, loopback, link-local, CGNAT, multicast, or reserved IPv4/IPv6 ranges (covers the cloud metadata 169.254.169.254). Body size capped at 5 MB.
  • Print-optimized companion routes. Every viewer (/a/[id], /f/[id], /n/[id]) has a /print sibling that auto-triggers the browser print dialog so the user can save as PDF.
  • Admin panel with a feedback queue ("report wrong verdict"), metrics (verdict distribution, per-pipeline volume, cache state), runtime-tunable rate limits and cost caps, and a one-click "mark as reviewed" toggle that removes the yellow "not yet human-reviewed" banner from public viewers.

Status

Live at jiddu.app. Source is open under AGPL-3.0 at rafaehlers/jiddu. Try the demos in EN, PT, or ES without spending a token — /a/demo-en, /f/demo-pt, /n/demo-es.