Originally developed by Michael Scott / Composed Software + ChatGPT & Codex
ClaimCheck applies an explicit, rule-based rubric to AI vendor claims to estimate evidence strength, business impact, and risk signals.
Important
The GitHub Pages site is a frontend demo only. It does not run the backend API or database, so end-to-end claim analysis is not functional there.
This project was developed conversationally using AI assistance.
Initial design, specification, and guidance were provided by the project author, Michael Scott.
Coding support and implementation were assisted using ChatGPT and Codex during development.
While AI tools were used to help generate and iterate on code and design elements, all decisions regarding architecture, scoring logic, and product direction were guided by the author.
apps/api: FastAPI backend (/analyze_claim,/evidence/search,/health)apps/web: Vite + React + TypeScript frontend (/,/app,/resources)docker-compose.yml: Postgres + pgvector, plus optional API service
Input a claim and receive:
category:Mature & Proven|Scaling & Strategic|Frontier & Experimental|Mirage Zonematurity_score(0-10, shown in UI as Evidence strength),impact_score(0-10)red_flags,cautions,questionsevidence(keyword-matched DB evidence + user links + optional named-customer signals)plotcoordinates (maturity,impact)
Request:
{
"text": "string",
"industry": "string|null",
"claimed_outcomes": ["string"],
"links": ["string"],
"named_customers": ["string"]
}Response:
{
"category": "string",
"maturity_score": 0,
"impact_score": 0,
"evidence": [
{
"title": "string",
"url": "string",
"published_at": "YYYY-MM-DD|null",
"quote": "string",
"matched_keywords": ["string"],
"match_reason": "keyword:title|keyword:snippet|user_link",
"independent": true,
"named_customer": "string|null",
"production": false,
"source_type": "independent_study|customer_case_study|testimonial|vendor_blog|vendor_website|user_supplied|placeholder",
"source_weight": 0.0
}
],
"red_flags": ["string"],
"cautions": ["string"],
"questions": ["string"],
"plot": { "maturity": 0, "impact": 0 }
}Request:
{
"query": "string",
"top_k": 5
}Returns:
{ "status": "ok" }independent_refs: weighted independent evidence, rounded, cap 2named_customers: weighted named-customer evidence, rounded, cap 2production_mentions: weighted production evidence, rounded, cap 2recency_bonus: +1 if any evidence in last 180 daysred_flag_penalty: full autonomy/no human review = 2, other flags = 1, total cap 3- structural skepticism penalties apply for weak evidence structure and vendor-controlled-only evidence
Formula:
maturity = 3*independent_refs + 2*named_customers + 2*production_mentions + recency_bonus - penalties
clamped to 0..10.
Category by maturity:
>=7: Mature & Proven5-6: Scaling & Strategic3-4: Frontier & Experimental<=2: Mirage Zone
Base by industry:
- marketing 6, ops 7, finance 8, healthcare 9, legal 8, manufacturing 8, supply_chain 9, default 7
Adjustments:
+1ifclaimed_outcomesis not empty-2governance penalty for healthcare/legal claims implying no human review
Result clamped to 0..10.
pnpm start:docker # Docker DB + API
pnpm start:db # Docker DB only
pnpm start:api # Local API (creates venv/install deps on first run)
pnpm start:web # Local web app
pnpm start:local # DB + local API + local web (opens new terminals)
pnpm stop:docker # Stop docker services- Start DB and API:
docker compose up --build- In another terminal, run web:
pnpm install
pnpm devWeb: http://localhost:5173
API: http://localhost:8080
- Start only DB:
docker compose up db- Start API:
cd apps/api
python -m venv .venv
.venv\Scripts\activate
pip install -r requirements.txt
python -m uvicorn app.main:app --host 0.0.0.0 --port 8080 --reload- Start web from repo root:
pnpm install
pnpm devThis repo now includes GitHub Actions workflows:
.github/workflows/ci.yml: runs web tests/build plus API tests on pull requests and pushes tomain..github/workflows/deploy-pages.yml: buildsapps/weband deploys it to GitHub Pages on pushes tomain.
GitHub Pages hosts static assets only, so this setup deploys the React frontend. The backend API (apps/api) still needs to run elsewhere (e.g., Hetzner, Fly.io, Render, Railway, etc.). If you open the GitHub Pages URL, treat it as a UI demo, not a fully working deployed system.
For production, set the frontend API endpoint with:
VITE_API_BASE_URLin your GitHub Action/repository variables or secrets (or hardcode if preferred).
- Push to
mainso the workflow runs. - In GitHub repo settings, open Pages.
- Set Source to GitHub Actions.
- After deployment, your site URL will be shown in the workflow output.
If you want your own domain/subdomain:
- Create DNS record to GitHub Pages target.
- Add a
CNAMEfile inapps/web/public(or configure custom domain in Pages settings). - Enable HTTPS in Pages settings.
API tests:
cd apps/api
pytestWeb smoke test:
cd apps/web
pnpm testWhen cached verdicts need refreshing, you can either normalize schema shape only, or fully recompute using current scoring/evidence logic:
cd apps/api
python -m scripts.migrate_verdict_json --dry-run
python -m scripts.migrate_verdict_json
python -m scripts.migrate_verdict_json --recompute --dry-run
python -m scripts.migrate_verdict_json --recompute- CORS is enabled for localhost/127.0.0.1 on any local port.
- No demo seed evidence is included by default in this public version.
- Schema includes
embedding vector(1536)as a placeholder for future embedding search. Claim.parsed_jsonandverdict_jsonare placeholders for future LLM parser and RAG pipeline integration.
Created by Michael Scott / Composed Software.