PHPackages                             marcostastny/sulu-ai-bundle - 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. [Utility &amp; Helpers](/categories/utility)
4. /
5. marcostastny/sulu-ai-bundle

ActiveSulu-bundle[Utility &amp; Helpers](/categories/utility)

marcostastny/sulu-ai-bundle
===========================

AI-assisted SEO meta generation for Sulu

v3.0.0(yesterday)02↑2900%MITPHPPHP ^8.2

Since Jun 8Pushed yesterdayCompare

[ Source](https://github.com/marcostastny/SuluAIBundle)[ Packagist](https://packagist.org/packages/marcostastny/sulu-ai-bundle)[ RSS](/packages/marcostastny-sulu-ai-bundle/feed)WikiDiscussions master Synced yesterday

READMEChangelog (1)Dependencies (7)Versions (2)Used By (0)

SuluAIBundle
============

[](#suluaibundle)

AI-assisted SEO meta generation for [Sulu](https://sulu.io/) 3.

- A **Settings** page (Settings → AI Settings) to configure an OpenAI-compatible API (base URL, model, API key, enabled toggle).
- A **Generate meta with AI** button on a page's **Meta / SEO** tab that sends the saved page's content to the API and fills the meta title, description and keywords.

[![AI Settings page](docs/images/settings.png)](docs/images/settings.png)

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

[](#requirements)

- PHP &gt;= 8.2
- Sulu &gt;= 3.0
- Symfony &gt;= 6.4

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

[](#installation)

```
composer require marcostastny/sulu-ai-bundle
```

Register the bundle in `config/bundles.php`:

```
return [
    /* ... */
    Marcostastny\SuluAIBundle\SuluAIBundle::class => ['all' => true],
];
```

Import the admin API routes in `config/routes_admin.yaml`:

```
sulu_ai_admin_api:
    resource: '@SuluAIBundle/Resources/config/routing_admin.yaml'
    prefix: /admin/api
```

Update the schema (Sulu uses the admin kernel):

```
bin/adminconsole doctrine:schema:update --force
```

Import the admin JS in your `assets/admin/index.js` (or `app.js`) and rebuild:

```
import "sulu-ai-bundle";
```

```
cd assets/admin && npm install && npm run build
```

Permissions
-----------

[](#permissions)

The bundle registers two security contexts under *Settings → Roles*, so you can let content editors generate meta without giving them access to the API key:

SectionContextGrants**AI Settings**`sulu_ai.settings`**View/Edit** the settings page (API URL, key, model)**AI Meta Generation**`sulu_ai.meta_generation`**View** to show and use the *Generate meta with AI* button on pagesGrant the relevant permissions to each role under *Settings → Roles*. The generate-meta button only appears for users who have **View** on *AI Meta Generation*, and the endpoint enforces the same permission.

Usage
-----

[](#usage)

1. Open **Settings → AI Settings**, enter the API URL (e.g. `https://api.openai.com/v1`), model (e.g. `gpt-4o-mini`) and API key, toggle **Enabled**, and save.
2. Open a page, **save** it, then open its **Meta / SEO** tab.
3. Click **Generate meta with AI**. The title, description and keywords fields are filled from the page's content (in the current content language). Review and save.

[![Generate meta with AI on the page SEO tab](docs/images/product_seo_tab.png)](docs/images/product_seo_tab.png)

The button is disabled until the page has been saved at least once (the backend reads the saved page content).

How it works
------------

[](#how-it-works)

The button posts the page id + locale to `POST /admin/api/ai/generate-meta`. The controller loads the saved page server-side (`PageRepositoryInterface` + `ContentManagerInterface`), flattens its content to plain text, calls the configured chat-completions endpoint, and returns `{title, description, keywords}` which the button writes into the SEO fields. The API key never leaves the server.

###  Health Score

40

—

FairBetter than 86% of packages

Maintenance100

Actively maintained with recent releases

Popularity3

Limited adoption so far

Community2

Small or concentrated contributor base

Maturity45

Maturing project, gaining track record

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

1d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/29226459?v=4)[marcostastny](/maintainers/marcostastny)[@marcostastny](https://github.com/marcostastny)

---

Tags

aibundlephpsulusulu-bundlesymfony

### Embed Badge

![Health badge](/badges/marcostastny-sulu-ai-bundle/health.svg)

```
[![Health](https://phpackages.com/badges/marcostastny-sulu-ai-bundle/health.svg)](https://phpackages.com/packages/marcostastny-sulu-ai-bundle)
```

###  Alternatives

[easycorp/easyadmin-bundle

Admin generator for Symfony applications

4.3k17.5M370](/packages/easycorp-easyadmin-bundle)

PHPackages © 2026

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