[PR #8] [MERGED] feat(truthometer): add Trump's Truth-o-Meter widget #8

Closed
opened 2026-08-09 19:09:25 +02:00 by zaph0d · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/niels-emmer/wall-cast/pull/8
Author: @niels-emmer
Created: 4/17/2026
Status: Merged
Merged: 4/17/2026
Merged by: @niels-emmer

Base: mainHead: feat/trump-truth-o-meter


📝 Commits (1)

  • 9e5bf51 feat(truthometer): add Trump's Truth-o-Meter widget

📊 Changes

12 files changed (+559 additions, -6 deletions)

View changed files

📝 .claude/launch.json (+4 -1)
📝 backend/app/config.py (+6 -0)
📝 backend/app/main.py (+2 -1)
backend/app/routers/truthometer.py (+211 -0)
📝 docker-compose.yml (+1 -0)
📝 docs/config-reference.md (+34 -0)
📝 frontend/src/admin/AdminPanel.tsx (+3 -2)
frontend/src/hooks/use-truthometer.ts (+13 -0)
📝 frontend/src/i18n/translations.ts (+40 -0)
📝 frontend/src/types/api.ts (+24 -0)
📝 frontend/src/widgets/base-registry.ts (+4 -2)
frontend/src/widgets/truthometer/TruthometerWidget.tsx (+217 -0)

📄 Description

Summary

  • New full-size rotator widget + backend endpoint that fetches Trump's Truth Social posts via the public Mastodon-compatible API
  • Stats block: posts/hr, posts/24h, % original, trend arrow (↑ trending / ↓ quieter / → steady)
  • Scrollable card list: newest post first, TLDR per card, Trump-red left border for originals, dimmed RETRUTH badge for reposts
  • AI TLDRs via OpenAI gpt-4o-mini (uses existing OPENAI_API_KEY in .env); falls back to first 280 chars if key is absent
  • Widget appears in the rotator slot picker in the admin panel under "Trump's Truth-o-Meter"
  • OPENAI_API_KEY forwarded explicitly into the backend container environment

Files changed

File Change
backend/app/routers/truthometer.py New router — fetch, parse, stats, TLDR generation, 5-min cache
backend/app/main.py Import + include_router
backend/app/config.py truthometer_cache_ttl, openai_api_key settings
docker-compose.yml Forward OPENAI_API_KEY into backend environment
frontend/src/widgets/truthometer/TruthometerWidget.tsx New widget component
frontend/src/hooks/use-truthometer.ts React Query hook
frontend/src/types/api.ts TruthometerPost, TruthometerStats, TruthometerData types
frontend/src/i18n/translations.ts Translation keys (nl + en)
frontend/src/widgets/base-registry.ts Register widget
frontend/src/admin/AdminPanel.tsx Add to ROTATOR_SLOT_TYPES
docs/config-reference.md Document truthometer widget type

Test plan

  • GET /api/truthometer returns posts + stats (verify with curl)
  • Widget renders stats chips and post cards in rotator
  • Original posts show Trump-red border; reposts show dimmed RETRUTH badge
  • With OPENAI_API_KEY set: TLDRs are AI-generated summaries
  • Without key: TLDRs are first 280 chars of post text
  • Widget appears in admin panel → Screens → rotator slot picker

🤖 Generated with Claude Code


🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/niels-emmer/wall-cast/pull/8 **Author:** [@niels-emmer](https://github.com/niels-emmer) **Created:** 4/17/2026 **Status:** ✅ Merged **Merged:** 4/17/2026 **Merged by:** [@niels-emmer](https://github.com/niels-emmer) **Base:** `main` ← **Head:** `feat/trump-truth-o-meter` --- ### 📝 Commits (1) - [`9e5bf51`](https://github.com/niels-emmer/wall-cast/commit/9e5bf51ce0950a09438e1d1908184b4abaf62a47) feat(truthometer): add Trump's Truth-o-Meter widget ### 📊 Changes **12 files changed** (+559 additions, -6 deletions) <details> <summary>View changed files</summary> 📝 `.claude/launch.json` (+4 -1) 📝 `backend/app/config.py` (+6 -0) 📝 `backend/app/main.py` (+2 -1) ➕ `backend/app/routers/truthometer.py` (+211 -0) 📝 `docker-compose.yml` (+1 -0) 📝 `docs/config-reference.md` (+34 -0) 📝 `frontend/src/admin/AdminPanel.tsx` (+3 -2) ➕ `frontend/src/hooks/use-truthometer.ts` (+13 -0) 📝 `frontend/src/i18n/translations.ts` (+40 -0) 📝 `frontend/src/types/api.ts` (+24 -0) 📝 `frontend/src/widgets/base-registry.ts` (+4 -2) ➕ `frontend/src/widgets/truthometer/TruthometerWidget.tsx` (+217 -0) </details> ### 📄 Description ## Summary - New full-size rotator widget + backend endpoint that fetches Trump's Truth Social posts via the public Mastodon-compatible API - Stats block: posts/hr, posts/24h, % original, trend arrow (↑ trending / ↓ quieter / → steady) - Scrollable card list: newest post first, TLDR per card, Trump-red left border for originals, dimmed RETRUTH badge for reposts - AI TLDRs via OpenAI `gpt-4o-mini` (uses existing `OPENAI_API_KEY` in `.env`); falls back to first 280 chars if key is absent - Widget appears in the rotator slot picker in the admin panel under "Trump's Truth-o-Meter" - `OPENAI_API_KEY` forwarded explicitly into the backend container environment ## Files changed | File | Change | |------|--------| | `backend/app/routers/truthometer.py` | New router — fetch, parse, stats, TLDR generation, 5-min cache | | `backend/app/main.py` | Import + `include_router` | | `backend/app/config.py` | `truthometer_cache_ttl`, `openai_api_key` settings | | `docker-compose.yml` | Forward `OPENAI_API_KEY` into backend environment | | `frontend/src/widgets/truthometer/TruthometerWidget.tsx` | New widget component | | `frontend/src/hooks/use-truthometer.ts` | React Query hook | | `frontend/src/types/api.ts` | `TruthometerPost`, `TruthometerStats`, `TruthometerData` types | | `frontend/src/i18n/translations.ts` | Translation keys (nl + en) | | `frontend/src/widgets/base-registry.ts` | Register widget | | `frontend/src/admin/AdminPanel.tsx` | Add to `ROTATOR_SLOT_TYPES` | | `docs/config-reference.md` | Document `truthometer` widget type | ## Test plan - [ ] `GET /api/truthometer` returns posts + stats (verify with `curl`) - [ ] Widget renders stats chips and post cards in rotator - [ ] Original posts show Trump-red border; reposts show dimmed RETRUTH badge - [ ] With `OPENAI_API_KEY` set: TLDRs are AI-generated summaries - [ ] Without key: TLDRs are first 280 chars of post text - [ ] Widget appears in admin panel → Screens → rotator slot picker 🤖 Generated with [Claude Code](https://claude.ai/claude-code) --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
zaph0d 2026-08-09 19:09:25 +02:00
Sign in to join this conversation.
No labels
pull-request
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
github-mirrors/wall-cast#8
No description provided.