Commit Graph

8 Commits

Author SHA1 Message Date
Terence
b7da4f42b9 feat: add LLM cost tracking with budget enforcement and admin dashboard
- New Cost_Tracker class: logs every API call (model, tokens, cost), enforces
  monthly budgets with hard-stop mode, provides aggregated reporting
- New llm_costs database table with indexes on created_at, model, operation
- Modified LLM class: call_openrouter_with_usage() extracts token usage from
  OpenRouter responses; budget gate checks before each API call
- Admin settings: monthly budget (USD), enforcement mode (disabled/warn/hard-stop),
  cost log retention period
- Admin cost dashboard: budget progress bar, daily cost chart (Chart.js),
  per-model and per-operation breakdowns, recent API call log
- PHPUnit tests: 16 tests covering cost calculation, pricing lookups,
  budget enforcement logic, and model validation
- Updated ARCHITECTURE.md with new table schema, data flow, and key decisions
- Updated CONVENTIONS.md with "how to add cost tracking for a new operation"
- Version bump to 2.4.0

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-13 04:18:30 +07:00
Terence Ong
672cdacd60 fix: apply tag removal and source stripping to root-level plugin files
The deploy workflow reads from the repo root (admin/, includes/, public/),
not the peptide-news-plugin/ subdirectory. Applied the same changes:
- Removed Tag component and tag rendering from ArticleCard
- Removed all tag-related CSS (variables, styles, skeleton, responsive)
- Added strip_source_suffix() to REST API for cleaning source names
  from titles/summaries with case-insensitive and domain-based matching

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-08 10:26:43 +07:00
Terence Ong
88766d7005 feat: redesign public news feed with Apple-inspired premium aesthetic
Complete CSS rewrite implementing a clean, modern design:
- Inter font family with refined typography scale (22px titles, 15px body)
- CSS custom properties for full light/dark mode theming
- Card-based article layout with 8px radius, subtle shadows, hover lift
- Generous spacing and whitespace for premium feel (900px max-width)
- Source badges with background treatment, blue-tinted tag pills
- Staggered skeleton loading animations
- WCAG AA accessible focus states and contrast ratios
- Responsive breakpoints at 480px, 768px, 1024px
- Reduced motion and high contrast media query support
- Version bumped to 2.2.0

Design approved by Design Director (8.5/10), QA verified all
28 .pn-* class names preserved with zero React component changes.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-07 16:43:05 +07:00
Terence Ong
8b14e9e8cd fix: show full AI summary and decode HTML entities
Remove CSS line-clamp that was truncating summaries to 3 lines (2 on
mobile). The AI summary is 4 sentences and should be displayed in full.
Also add decodeEntities() to clean up &nbsp; and &#039; artifacts in
titles and summaries returned by the REST API.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-07 14:22:17 +07:00
Terence Ong
1ae831e183 feat: remove AI thumbnails, rewrite frontend with React (v1.3.0)
Remove all AI thumbnail generation infrastructure (too expensive,
poor results) and rewrite the public-facing article feed as a React
SPA mounted via WordPress shortcode.

Changes:
- Remove thumbnail generation, OG scraping, and image download code
  from fetcher, LLM, and admin classes
- Replace server-rendered PHP templates with React component
  (PeptideNewsFeed.jsx) using WordPress-bundled React/ReactDOM
- Add Babel build pipeline for JSX transpilation
- Update REST API to serve ai_summary instead of thumbnail fields
- Redesign public CSS: clean card layout, loading skeletons,
  dark mode, responsive, no thumbnail imagery
- Remove dead admin settings (llm_image_model, thumbnail_fallback)
- Fix call_openrouter() visibility for Content Filter cross-class use
- Bump version to 1.3.0

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-07 09:45:12 +07:00
Peptide News Team
aad57424c9 fix: add focus states for keyboard a11y and guard empty excerpt
Addresses QA Agent 2 findings:
- Add :focus outline on title and thumbnail links for keyboard navigation
- Wrap excerpt paragraph in conditional to avoid empty <p> when both
  ai_summary and excerpt are missing

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-06 18:55:22 +07:00
Peptide News Team
203aa46036 feat: switch article display from grid to list layout
Rewrites public CSS to match actual .pn-* class names from the PHP
template and changes the default shortcode layout from card/grid to a
horizontal list: fixed-width thumbnail on the left, title + summary on
the right.  Includes compact variant for widgets and responsive
stacking on small screens.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-06 18:43:16 +07:00
Peptide News Team
d99c505d1c Add missing Loader class and public CSS
The Peptide_News_Loader class was referenced by class-peptide-news.php
but never committed, causing a fatal error on plugin activation.
Also adds public/css/public-style.css which is enqueued by the public
class.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-06 16:32:42 +07:00