PHPackages                             muzorix/ai-blog-engine - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Admin Panels](/categories/admin)
4. /
5. muzorix/ai-blog-engine

ActiveLibrary[Admin Panels](/categories/admin)

muzorix/ai-blog-engine
======================

Laravel AI blog engine: discover topics, generate articles in queued chunks, humanize and fact-check content, optimize for SEO/AEO/GEO, create FAQs and images, manage internal links and duplicates, and run the full workflow from a Filament admin panel.

v1.0.0(1mo ago)06MITPHPPHP ^8.2CI passing

Since Jul 10Pushed 1mo agoCompare

[ Source](https://github.com/muzorix/ai-blog-engine)[ Packagist](https://packagist.org/packages/muzorix/ai-blog-engine)[ RSS](/packages/muzorix-ai-blog-engine/feed)WikiDiscussions main Synced 1w ago

READMEChangelogDependencies (10)Versions (2)Used By (0)

muzorix/ai-blog-engine
======================

[](#muzorixai-blog-engine)

**Fully automated, backend-only AI blog/article system for Laravel.**

Discover topics, write full articles, humanize them, run fact-checking and SEO/AEO/GEO optimization, generate images and FAQs, manage internal linking and duplicate detection, and control the full lifecycle through a Filament admin panel. You bring your own frontend (Blade, Livewire, Inertia, or headless).

MIT licensed. Multi-provider throughout: **Groq**, **Gemini**, **OpenAI**, **Claude**.

---

Table of Contents
-----------------

[](#table-of-contents)

- [What This Package Does](#what-this-package-does)
- [Feature List](#feature-list)
- [Requirements](#requirements)
- [Installation](#installation)
- [Configuration](#configuration)
- [Admin Panel Guide](#admin-panel-guide)
- [The Article Pipeline](#the-article-pipeline)
- [Day-to-Day Usage](#day-to-day-usage)
- [Artisan Commands](#artisan-commands)
- [Scheduled Jobs](#scheduled-jobs)
- [Publishing Modes](#publishing-modes)
- [Topic Discovery](#topic-discovery)
- [AI Providers](#ai-providers)
- [Image Providers](#image-providers)
- [Frontend Integration](#frontend-integration)
- [Models &amp; Querying](#models--querying)
- [Programmatic Usage](#programmatic-usage)
- [Database Tables](#database-tables)
- [Troubleshooting](#troubleshooting)
- [Package Structure](#package-structure)
- [License](#license)

---

What This Package Does
----------------------

[](#what-this-package-does)

Most AI writing tools generate text and stop. This package treats article creation as a **full lifecycle**:

1. Discover and score topics from RSS, News API, or manual entry
2. Generate structured articles section-by-section
3. Humanize, fact-check, and optimize for SEO, AEO, and GEO
4. Generate FAQs, images, and internal links
5. Flag duplicates and route to review (or auto-publish)
6. Monitor freshness and refresh aging content

Everything is **self-hosted**. Your data, your pipeline, your providers.

---

Feature List
------------

[](#feature-list)

ModuleDescription**Topic Discovery**Pluggable sources: Manual, RSS, News API — each topic scored for relevance &amp; opportunity**Article Generation**Outline-first, section-by-section writing with configurable length, tone, and reading level**Humanization Pass**Second AI pass to reduce robotic phrasing; optional voice profile file**Fact Verification**Extracts claims, cross-checks against source material, flags unverified claims**SEO Layer**Meta title/description, slug, readability score, JSON-LD schema**AEO Layer**Featured-snippet answers, definition callouts, FAQPage schema**GEO Layer**Citation-friendly structure for AI answer engines (ChatGPT, Perplexity, etc.)**FAQ Generation**4–6 auto-generated Q&amp;A pairs per article**Image Generation**Featured + optional inline images; Pollinations (free) default**Internal Linking**Semantic similarity finds related articles; AI inserts contextual links**Duplicate Detection**Embedding similarity check before publish**Review Workflow**Human approve / reject from admin; or self-writing auto-publish mode**Freshness Engine**Flags old or declining-traffic articles for refresh**Content Calendar**AI proposes weekly topics based on content gaps**Analytics Loop**Weights topic sources by historical article performance**Filament Admin**Dashboard, Topics, Articles, Sources, Freshness Queue, AI Settings---

Requirements
------------

[](#requirements)

- **PHP** 8.2+
- **Laravel** 11+ (tested on Laravel 13)
- **Database** MySQL, PostgreSQL, or SQLite
- **Queue driver** — `database` or `redis` recommended (`QUEUE_CONNECTION=database`)
- **At least one AI text provider API key** (Groq recommended — free tier available)
- **Composer** with `ext-json` and `ext-mbstring`

---

Installation
------------

[](#installation)

### 1. Install the package

[](#1-install-the-package)

```
composer require muzorix/ai-blog-engine
```

For local path development (monorepo):

```
// composer.json
"repositories": [
    {
        "type": "path",
        "url": "packages/ai-blog-engine",
        "options": { "symlink": true }
    }
],
"require": {
    "muzorix/ai-blog-engine": "@dev"
}
```

### 2. Run the install command

[](#2-run-the-install-command)

```
php artisan ai-blog-engine:install --migrate
```

This will:

- Publish `config/ai-blog-engine.php`
- Publish and run database migrations
- Seed default topic sources (Manual, RSS, News API)
- Create the `public/storage` symlink (for images)
- Publish Filament CSS/JS assets

### 3. Publish Filament assets (if admin looks unstyled)

[](#3-publish-filament-assets-if-admin-looks-unstyled)

If the admin login page has no styling, run:

```
php artisan filament:assets
```

> **Important:** Set `APP_URL` in `.env` to match how you access the site (`http://127.0.0.1:8000` vs `http://localhost:8000`).

### 4. Configure environment variables

[](#4-configure-environment-variables)

Copy the block below into `.env` and fill in your keys:

```
# Core
ABE_MODE=review
ABE_TEXT_PROVIDER=groq
ABE_IMAGE_PROVIDER=pollinations

# Site identity (used in prompts & schema.org)
ABE_SITE_NAME=Muzorix
ABE_SITE_URL=https://muzorix.com
ABE_SITE_NICHE="tech news, software, AI, gadgets, and technology industry"
ABE_SITE_DESCRIPTION="Tech news and insights covering software, AI, gadgets, and industry trends"
ABE_AUTHOR_NAME=Muzorix
ABE_ORGANIZATION_NAME=Muzorix

# Generation defaults
ABE_DEFAULT_LENGTH=1200
ABE_DEFAULT_TONE=professional
ABE_INLINE_IMAGES=false

# Publishing
ABE_REQUIRE_APPROVAL=true
ABE_ADMIN_PATH=abe-admin
ABE_BLOG_PATH=blog

# Topic sources
ABE_RSS_ENABLED=true
ABE_RSS_FEEDS=https://feeds.example.com/rss,https://another.com/feed
ABE_NEWS_API_ENABLED=true
ABE_NEWS_QUERY="technology OR software OR artificial intelligence"

# API keys
GROQ_API_KEY=your-groq-key
NEWS_API_KEY=your-newsapi-key
```

### 5. Enable Filament panel access on your User model

[](#5-enable-filament-panel-access-on-your-user-model)

Your `App\Models\User` must implement `Filament\Models\Contracts\FilamentUser`:

```
use Filament\Models\Contracts\FilamentUser;
use Filament\Panel;

class User extends Authenticatable implements FilamentUser
{
    public function canAccessPanel(Panel $panel): bool
    {
        return true; // restrict as needed
    }
}
```

### 6. Create an admin user

[](#6-create-an-admin-user)

```
php artisan make:filament-user --panel=ai-blog-engine
```

### 7. Start the queue worker

[](#7-start-the-queue-worker)

Article generation runs as queued jobs. Start a worker:

```
php artisan queue:work
```

Or use the Laravel `composer dev` script if your project has it.

### 8. Start the scheduler (production)

[](#8-start-the-scheduler-production)

Add to your server crontab:

```
* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1
```

The package registers these scheduled jobs automatically:

JobDefault schedulePurpose`FetchTopicsJob`Every 6 hoursPull topics from enabled sources`RunFreshnessScanJob`Mondays 3 AMFlag articles needing updates`RunContentCalendarJob`Sundays 4 AMPropose new topics for the week`PullAnalyticsJob`Daily 5 AMUpdate source weights &amp; queue topics### 9. Open the admin panel

[](#9-open-the-admin-panel)

```
http://your-site.test/abe-admin

```

(Path is configurable via `ABE_ADMIN_PATH`.)

---

Configuration
-------------

[](#configuration)

Publish or re-publish config anytime:

```
php artisan vendor:publish --tag=ai-blog-engine-config --force
```

### Key config sections

[](#key-config-sections)

SectionPurpose`mode``review` or `self_writing``site`Niche, description, author, organization — fed into AI prompts and schema`text_provider`Default provider + per-step overrides (`generate`, `humanize`, `fact_check`, etc.)`image_provider`Default image driver`humanization`Enable/disable pass; optional `voice_profile_path` text file`fact_check`Enable/disable; `block_unverified_claims` for hard blocking`seo`Min word count, readability target, meta length limits`aeo`FAQ count, snippet optimization`geo`Citation-friendly restructuring`images`Disk, directory, `inline_per_h2` toggle`duplicate_check`Similarity threshold (0.85 default), compare last N articles`internal_linking`Max links per article, related article count`freshness`Check interval days, traffic decline threshold`topic_discovery`Min scores, RSS feeds, News API query`generation`Default length, tone, reading level`frontend``blog_path` for canonical URLs in schema`schedule`Cron expressions for automated jobsMost settings can also be changed from **AI Settings** in the admin panel without editing files.

---

Admin Panel Guide
-----------------

[](#admin-panel-guide)

The Filament panel is at `/abe-admin` (panel ID: `ai-blog-engine`).

### Dashboard

[](#dashboard)

- Pipeline stats: queued topics, pending review, published count, freshness queue
- Recent articles table

### Topics

[](#topics)

Manage the topic pipeline:

ActionDescription**Create**Manually add a topic (auto-queued for generation)**Fetch Topics**Pull from RSS / News API and score with AI**Score**Re-run AI relevance/opportunity scoring on a topic**Generate**Dispatch full article pipeline for a topic**Topic statuses:** `pending` → `scored` → `queued` → `processing` → `completed`

### Articles

[](#articles)

Full CRUD for generated articles:

ActionDescription**Edit**Modify title, body, meta tags, status**Approve**Publish article (sets `published_at`)**Reject**Mark as rejectedReview panel shows SEO score, readability, AEO score, duplicate flag, and fact-check flags.

### Sources

[](#sources)

Enable/disable and configure topic sources:

- **Manual** — topics entered by hand
- **RSS** — comma-separated feed URLs in config or `config` key-value in admin
- **News API** — requires `NEWS_API_KEY` and search query

Adjust `performance_weight` to boost sources that produce high-performing articles.

### Freshness Queue

[](#freshness-queue)

Articles flagged as `needs_update` appear here:

- **Run Freshness Scan** — scan all published articles
- **Refresh** — regenerate an updated draft through the full pipeline

### AI Settings

[](#ai-settings)

Configure without touching `.env`:

- Site niche, description, author, URL
- Mode (review vs self-writing)
- Text and image providers
- Tone and target word count
- Humanization, fact-check, and inline image toggles

---

The Article Pipeline
--------------------

[](#the-article-pipeline)

When a topic is generated, it passes through these steps in order:

```
Topic
  ↓
1. ArticleGenerator     — outline + section-by-section HTML body
  ↓
2. HumanizerPass        — reduce AI tells (optional)
  ↓
3. FactVerifier         — extract & verify claims against source
  ↓
4. SeoProcessor         — meta tags, slug, schema.org JSON-LD
  ↓
5. AeoProcessor         — snippet answer + definition callouts
  ↓
6. GeoProcessor         — citation-friendly restructuring
  ↓
7. FaqGenerator         — 4–6 FAQ pairs + FAQPage schema
  ↓
8. ImageGenerator       — featured image (+ inline per H2 if enabled)
  ↓
9. InternalLinker       — semantic links to related published articles
  ↓
10. DuplicateChecker    — flag near-duplicates by embedding similarity
  ↓
11. Finalize            — pending_review OR auto-publish

```

Each step logs to `abe_ai_generation_logs` with provider, tokens, and cost estimate.

---

Day-to-Day Usage
----------------

[](#day-to-day-usage)

### Workflow A: Fully automated (with review)

[](#workflow-a-fully-automated-with-review)

```
# 1. Fetch topics from RSS / News API
php artisan ai-blog-engine:fetch-topics

# 2. Generate articles for all queued topics
php artisan ai-blog-engine:generate --queued

# 3. Review in admin → Articles → Approve or Reject
```

### Workflow B: Manual topic → article

[](#workflow-b-manual-topic--article)

1. Go to **Topics → Create**
2. Enter title and summary (paste source content in summary for fact-checking)
3. Set status to `queued`
4. Click **Generate** on the topic row (or run `php artisan ai-blog-engine:generate {id}`)
5. Review and approve in **Articles**

### Workflow C: Self-writing (no human step)

[](#workflow-c-self-writing-no-human-step)

```
ABE_MODE=self_writing
ABE_REQUIRE_APPROVAL=false
```

Articles publish automatically when fact-check and duplicate checks pass.

### Workflow D: Refresh aging content

[](#workflow-d-refresh-aging-content)

```
php artisan ai-blog-engine:freshness-scan
```

Then use **Freshness Queue** in admin to refresh flagged articles.

---

Artisan Commands
----------------

[](#artisan-commands)

CommandDescription`php artisan ai-blog-engine:install`Publish config, migrations, seed sources, Filament assets`php artisan ai-blog-engine:install --migrate`Same + run migrations`php artisan ai-blog-engine:fetch-topics`Fetch and AI-score topics from enabled sources`php artisan ai-blog-engine:generate {topic?}`Generate article for one topic ID`php artisan ai-blog-engine:generate --queued`Generate all queued topics`php artisan ai-blog-engine:freshness-scan`Scan published articles for freshness flags`php artisan make:filament-user --panel=ai-blog-engine`Create admin login`php artisan filament:assets`Re-publish Filament CSS/JS (fix unstyled admin)---

Scheduled Jobs
--------------

[](#scheduled-jobs)

Registered automatically when `APP_ENV` runs in console. Customize cron in `config/ai-blog-engine.php` under `schedule`:

```
'schedule' => [
    'fetch_topics'     => '0 */6 * * *',  // every 6 hours
    'freshness_scan'   => '0 3 * * 1',    // Mondays 3 AM
    'content_calendar' => '0 4 * * 0',    // Sundays 4 AM
    'analytics_pull'   => '0 5 * * *',    // daily 5 AM
],
```

Override via env: `ABE_SCHEDULE_FETCH_TOPICS`, `ABE_SCHEDULE_FRESHNESS`, etc.

---

Publishing Modes
----------------

[](#publishing-modes)

ModeConfigBehavior**Review**`ABE_MODE=review`Articles land in `pending_review`; human approves in admin**Self-writing**`ABE_MODE=self_writing`Auto-publish if no blocking fact-check flags and not duplicate-flaggedArticle statuses: `draft` → `humanizing` → `fact_checking` → `seo_processing` → `pending_review` → `published`

Also: `scheduled`, `needs_update`, `rejected`

---

Topic Discovery
---------------

[](#topic-discovery)

### Manual

[](#manual)

Create topics in admin. Best practice: paste source article text in **summary** or store full content in `raw_payload` so fact-checking can verify claims.

### RSS

[](#rss)

```
ABE_RSS_ENABLED=true
ABE_RSS_FEEDS=https://feeds.arstechnica.com/arstechnica/index,https://www.theverge.com/rss/index.xml
```

Or configure feeds per-source in **Sources → RSS → config** key `feeds` as JSON array.

### News API

[](#news-api)

```
ABE_NEWS_API_ENABLED=true
NEWS_API_KEY=your-key
ABE_NEWS_QUERY="technology OR artificial intelligence"
```

Get a free key at [newsapi.org](https://newsapi.org).

### AI Scoring

[](#ai-scoring)

Each topic receives:

- **Relevance score** (0–100) — fit to your niche
- **Opportunity score** (0–100) — timeliness and content gap potential

Topics below `ABE_MIN_RELEVANCE` (50) or `ABE_MIN_OPPORTUNITY` (30) are not queued.

---

AI Providers
------------

[](#ai-providers)

### Text providers

[](#text-providers)

DriverEnv keyNotes`groq``GROQ_API_KEY` or `GROQ_API_KEYS`Free tier, fast — supports **multiple keys** with auto-rotation on 429`openai``OPENAI_API_KEY`GPT-4o mini default`claude``ANTHROPIC_API_KEY`Claude Sonnet default`gemini``GEMINI_API_KEY`Gemini 2.0 Flash defaultUse one provider for all steps:

```
ABE_TEXT_PROVIDER=groq
GROQ_API_KEY=gsk_your_first_key
```

**Multiple Groq keys (recommended for production / heavy usage):**

When one key hits its rate limit, the package automatically switches to the next key — no job failure, no manual intervention.

```
GROQ_API_KEYS=gsk_key_one,gsk_key_two,gsk_key_three
```

You can still set `GROQ_API_KEY` for a single key; `GROQ_API_KEYS` takes precedence when set (comma-separated, no spaces required).

Keys are rotated round-robin for even load. On HTTP 429, the current key is skipped and the next is tried immediately.

Or override per pipeline step:

```
ABE_TEXT_PROVIDER_GENERATE=claude
ABE_TEXT_PROVIDER_HUMANIZE=groq
ABE_TEXT_PROVIDER_FACT_CHECK=claude
```

### Programmatic usage

[](#programmatic-usage)

```
use Muzorix\AiBlogEngine\AiText\AiTextManager;

$ai = app(AiTextManager::class);
$response = $ai->prompt('generate', 'Write a headline about Laravel 13');
$json = $ai->json('seo', 'Return JSON with meta_title and meta_description for...');
```

---

Image Providers
---------------

[](#image-providers)

DriverEnv keyCost`pollinations`noneFree`unsplash``UNSPLASH_ACCESS_KEY`Free (stock photos)`openai``OPENAI_API_KEY`Paid (DALL-E 3)`stability``STABILITY_API_KEY`Paid```
ABE_IMAGE_PROVIDER=pollinations
ABE_INLINE_IMAGES=false   # true = generate image per H2 section
```

Images are stored on the disk configured in `ABE_IMAGE_DISK` (default: `public`) under `abe-images/`.

---

Frontend Integration
--------------------

[](#frontend-integration)

This package is **backend-only**. Query models from your own routes, controllers, or Livewire components.

### Blade example

[](#blade-example)

```
// routes/web.php
use Muzorix\AiBlogEngine\Models\Article;

Route::get('/blog', fn () => view('blog.index', [
    'articles' => Article::published()
        ->with(['faqs', 'images'])
        ->latest('published_at')
        ->paginate(12),
]));

Route::get('/blog/{slug}', function (string $slug) {
    $article = Article::published()
        ->where('slug', $slug)
        ->with(['faqs', 'images', 'outboundLinks.linkedArticle'])
        ->firstOrFail();

    return view('blog.show', compact('article'));
});
```

```
{{-- resources/views/blog/show.blade.php --}}

    {{ $article->meta_title ?? $article->title }}
    @if ($article->meta_description)

    @endif
    @if ($article->schema_markup)
        {!! $article->schema_json !!}
    @endif

{{ $article->title }}
{!! $article->body !!}

@foreach ($article->faqs as $faq)

        {{ $faq->question }}
        {{ $faq->answer }}

@endforeach
```

### Livewire

[](#livewire)

```
use Livewire\Component;
use Livewire\WithPagination;
use Muzorix\AiBlogEngine\Models\Article;

class BlogIndex extends Component
{
    use WithPagination;

    public function render()
    {
        return view('livewire.blog-index', [
            'articles' => Article::published()
                ->latest('published_at')
                ->paginate(12),
        ]);
    }
}
```

### Canonical URLs

[](#canonical-urls)

Articles expose a `url` attribute using `ABE_SITE_URL` + `ABE_BLOG_PATH`:

```
https://muzorix.com/blog/your-article-slug

```

### Related articles

[](#related-articles)

```
use Muzorix\AiBlogEngine\Pipeline\InternalLinker;

$related = app(InternalLinker::class)->findSimilarArticles($article);
```

---

Models &amp; Querying
---------------------

[](#models--querying)

ModelTablePurpose`Topic``abe_topics`Discovered/scored topics`TopicSource``abe_topic_sources`Source configuration`Article``abe_articles`Generated articles`ArticleFaq``abe_article_faqs`FAQ pairs`ArticleImage``abe_article_images`Featured and inline images`ArticleLink``abe_article_links`Internal links between articles`FactCheckFlag``abe_fact_check_flags`Claim verification results`AiGenerationLog``abe_ai_generation_logs`Per-step AI usage logs`ArticleEdit``abe_article_edits`Human/AI edit audit trail`ArticleAnalytic``abe_article_analytics`Pageview data for freshness/analytics### Useful scopes

[](#useful-scopes)

```
Article::published()->latest('published_at')->get();
Article::pendingReview()->get();
Article::needsUpdate()->get();
Topic::readyForGeneration()->get();
Topic::scheduled()->get();
```

### Publish manually

[](#publish-manually)

```
$article->publish(); // sets status, published_at, last_updated_at
```

---

Programmatic Usage
------------------

[](#programmatic-usage-1)

### Run the full pipeline

[](#run-the-full-pipeline)

```
use Muzorix\AiBlogEngine\Facades\AiBlogEngine;
use Muzorix\AiBlogEngine\Models\Topic;

$topic = Topic::find(1);
$article = AiBlogEngine::run($topic);
```

### Generate with custom options

[](#generate-with-custom-options)

```
use Muzorix\AiBlogEngine\Pipeline\ArticleGenerator;

$article = ArticleGenerator::make()
    ->provider('groq')
    ->targetLength(1500)
    ->tone('professional')
    ->readingLevel('grade_8')
    ->generate($topic);
```

### Dispatch as background job

[](#dispatch-as-background-job)

```
use Muzorix\AiBlogEngine\Jobs\GenerateArticleJob;

GenerateArticleJob::dispatch($topic);
```

---

Database Tables
---------------

[](#database-tables)

```
abe_topic_sources     — source drivers and config
abe_topics            — discovered topics with scores
abe_articles          — article content, SEO, schema, embeddings
abe_article_faqs      — FAQ Q&A pairs
abe_article_images    — featured and inline images
abe_article_links     — internal link graph
abe_fact_check_flags  — claim verification results
abe_ai_generation_logs — AI step audit log
abe_article_edits     — edit diff history
abe_article_analytics — traffic data for freshness loop

```

---

Troubleshooting
---------------

[](#troubleshooting)

### Admin panel has no CSS / looks like plain HTML

[](#admin-panel-has-no-css--looks-like-plain-html)

```
php artisan filament:assets
```

Hard-refresh the browser (`Ctrl+Shift+R`).

### Admin panel CSS loads but from wrong host

[](#admin-panel-css-loads-but-from-wrong-host)

Set `APP_URL` in `.env` to exactly match your browser URL:

```
APP_URL=http://127.0.0.1:8000
```

### Articles stuck in processing

[](#articles-stuck-in-processing)

Ensure a queue worker is running:

```
php artisan queue:work
```

Check `storage/logs/laravel.log` and the `abe_ai_generation_logs` table.

### "API key not configured" errors

[](#api-key-not-configured-errors)

Verify the correct env key for your provider (`GROQ_API_KEY`, etc.) and run:

```
php artisan config:clear
```

### Images not displaying

[](#images-not-displaying)

```
php artisan storage:link
```

Confirm `ABE_IMAGE_DISK=public` and files exist in `storage/app/public/abe-images/`.

### No topics after fetch

[](#no-topics-after-fetch)

- Check RSS feed URLs are valid and reachable
- Verify `NEWS_API_KEY` if using News API
- Lower `ABE_MIN_RELEVANCE` / `ABE_MIN_OPPORTUNITY` in config
- Topics with duplicate titles from the last 30 days are skipped

### Fact-check flags everything as unverified

[](#fact-check-flags-everything-as-unverified)

Paste the original source content into the topic **summary** or ensure `raw_payload.content` is populated when the topic is created.

---

Package Structure
-----------------

[](#package-structure)

```
packages/ai-blog-engine/
├── config/ai-blog-engine.php
├── database/migrations/
├── src/
│   ├── AiBlogEngineServiceProvider.php
│   ├── AiText/Drivers/          Groq, OpenAI, Claude, Gemini
│   ├── AiImage/Drivers/         Pollinations, Unsplash, OpenAI, Stability
│   ├── TopicSources/Drivers/    Manual, RSS, News API
│   ├── Pipeline/                All processing steps + ArticlePipeline
│   ├── Jobs/                    Fetch, Generate, Refresh, Calendar, Analytics
│   ├── Commands/                Install, fetch, generate, freshness-scan
│   ├── Models/
│   ├── Filament/                Admin panel, resources, widgets
│   └── Support/                 Slug, embedding, readability helpers
└── README.md

```

---

License
-------

[](#license)

MIT — free for personal and commercial use.

###  Health Score

39

—

LowBetter than 84% of packages

Maintenance90

Actively maintained with recent releases

Popularity5

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity46

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

49d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/0f67a15f699c0b752592bfb334e69fa756b80c0d4ae746216b76884c4482871d?d=identicon)[muzorix](/maintainers/muzorix)

---

Top Contributors

[![muzorix](https://avatars.githubusercontent.com/u/212666178?v=4)](https://github.com/muzorix "muzorix (3 commits)")

---

Tags

laravelaicontentblogseofilament

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/muzorix-ai-blog-engine/health.svg)

```
[![Health](https://phpackages.com/badges/muzorix-ai-blog-engine/health.svg)](https://phpackages.com/packages/muzorix-ai-blog-engine)
```

###  Alternatives

[psalm/plugin-laravel

Psalm plugin for Laravel

3345.4M354](/packages/psalm-plugin-laravel)[spatie/laravel-health

Monitor the health of a Laravel application

88412.7M191](/packages/spatie-laravel-health)[simplestats-io/laravel-client

Server-side analytics for Laravel that follows the full funnel from visit to registration to payment, attributed to the channel that drove it. Revenue, MRR, churn and ad-spend profit (ROAS/CAC) per channel. GDPR compliant, ad-blocker proof.

5226.7k](/packages/simplestats-io-laravel-client)[api-platform/laravel

API Platform support for Laravel

58190.1k21](/packages/api-platform-laravel)[fleetbase/core-api

Core Framework and Resources for Fleetbase API

1239.7k25](/packages/fleetbase-core-api)[aedart/athenaeum

Athenaeum is a mono repository; a collection of various PHP packages

265.2k](/packages/aedart-athenaeum)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
