Skip to content

feat: AI Content Quality Scoring Dashboard (#35)#53

Open
Weegy wants to merge 10 commits intodevfrom
feature/quality-scoring
Open

feat: AI Content Quality Scoring Dashboard (#35)#53
Weegy wants to merge 10 commits intodevfrom
feature/quality-scoring

Conversation

@Weegy
Copy link
Copy Markdown
Contributor

@Weegy Weegy commented Mar 16, 2026

Features

  • 5 AI Analyzers: Sentiment, Readability, Engagement, SEO, and Tone analysis
  • Scoring Dashboard: Real-time quality metrics visualization
  • Pipeline Integration: Seamless quality checks in content workflows
  • Security Hardening: Role-based access control and audit logging

Changes

  • Quality analyzer service with modular architecture
  • API endpoints for quality assessment
  • Dashboard UI for score tracking
  • Comprehensive test suite
  • Documentation and OpenAPI spec updates

numen-bot added 10 commits March 16, 2026 06:15
…, ReadabilityAnalyzer, SeoAnalyzer + unit tests

- QualityAnalyzerContract interface (App\Services\Quality\Contracts)
- QualityDimensionResult value object with getScore/getItems/getMetadata/countByType
- ReadabilityAnalyzer: Flesch-Kincaid score, sentence length, paragraph structure, passive voice detection
- SeoAnalyzer: title/meta description length, heading hierarchy, keyword density, link analysis, image alt coverage
- Unit tests: 21 tests, 42 assertions, all passing
…gementPrediction + LLM prompt config

- BrandConsistencyAnalyzer: uses Persona system_prompt + voice_guidelines,
  scores tone consistency / vocabulary / brand voice via LLM; heuristic fallback
  when no persona or LLM unavailable
- FactualAccuracyAnalyzer: extracts claims via LLM, cross-references
  ContentGraphNode entities, scores verifiable claims + citations;
  regex heuristic fallback
- EngagementPredictionAnalyzer: predicts engagement (headline strength,
  hook quality, emotional resonance, CTA, shareability) via LLM;
  heuristic fallback with power-word + CTA detection
- config/quality-prompts.php: config-driven system + user prompt templates
  with {{content}} / {{context}} placeholders for all 3 analyzers
- Unit tests (22 assertions) for all 3 analyzers with mocked LLM responses
- Pint + PHPStan both pass (0 errors)
…tyTrendAggregator

- ContentQualityService orchestrates all 5 analyzers, calculates weighted
  overall score, persists ContentQualityScore + ContentQualityScoreItem
  records, fires ContentQualityScored event, caches result for 1h in Redis
- ScoreContentQualityJob dispatches async scoring on 'quality' queue
- QualityTrendAggregator: getSpaceTrends (daily averages), getSpaceLeaderboard
  (top-scoring content), getDimensionDistribution (histogram buckets)
- Register ContentQualityService + QualityTrendAggregator as singletons
  in AppServiceProvider
- Feature tests: full scoring flow, weighted calc, job dispatch/sync,
  trend aggregation, cache hit/miss
…d, QualityDashboardController + /admin/quality route
…st infrastructure fixes (phpunit.xml APP_BASE_PATH, PipelineRunFactory)
@Weegy Weegy force-pushed the feature/quality-scoring branch from 48ca452 to b767c3e Compare March 16, 2026 06:16
@Weegy Weegy added the enhancement New feature or request label Mar 18, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant