Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 26 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,32 @@

All notable changes to this project will be documented in this file.

## [2.0.0] - Unreleased

### Changed (BREAKING)
- **Package renamed** from `manukminasyan/filament-blog` to `relaticle/ink`
- **PHP namespace** changed from `ManukMinasyan\FilamentBlog\` to `Relaticle\Ink\`
- **Service provider** renamed: `FilamentBlogServiceProvider` → `InkServiceProvider`
- **Filament plugin** renamed: `FilamentBlogPlugin` → `InkPlugin`
- **Config file** renamed: `config/filament-blog.php` → `config/ink.php`. Use `config('ink.X')` instead of `config('filament-blog.X')`.
- **Publish tags** renamed: `filament-blog-config` → `ink-config`, `filament-blog-views` → `ink-views`, `filament-blog-migrations` → `ink-migrations`, `filament-blog-translations` → `ink-translations`
- **View component prefix** renamed: `<x-blog::post-card>` → `<x-ink::post-card>` (all components affected)
- **View namespace** renamed: `view('blog::X')` → `view('ink::X')`

### Unchanged (compatibility-preserving)
- Database table names (`blog_posts`, `blog_categories`, `blog_tags`, `blog_post_tag`) — no data migration required
- Route names (`blog.index`, `blog.show`, `blog.category`, `blog.preview`, `blog.feed`, `blog.tag`) — public API contract preserved
- URL prefix default (still `/blog`, configurable via `config('ink.prefix')`)
- All public model/component APIs and method signatures

### Migration
```bash
composer remove manukminasyan/filament-blog
composer require relaticle/ink:^2.0
```

See [UPGRADING.md](UPGRADING.md) for the full sed recipe.

## [1.0.1] - 2026-04-01

### Fixed
Expand Down
38 changes: 19 additions & 19 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Filament Blog
# Ink

Headless blog package for Filament applications. Provides models, Filament admin, MCP tools, SEO components, publishable UI components, and an **opt-in public-routes mode** for hosts that just want a working blog without writing controllers.
Filament-native content publishing for blog, docs, and AI-citable articles. Ships Eloquent models, a full Filament admin, MCP tools for AI agents, SEO components, publishable Blade UI components, and an **opt-in public-routes mode** for hosts that want a working blog without writing controllers.

## Features

Expand All @@ -25,14 +25,14 @@ Headless blog package for Filament applications. Provides models, Filament admin
## Installation

```bash
composer require manukminasyan/filament-blog
composer require relaticle/ink
```

Register the plugin and run migrations:

```php
// AppPanelProvider.php
->plugin(\ManukMinasyan\FilamentBlog\FilamentBlogPlugin::make())
->plugin(\Relaticle\Ink\InkPlugin::make())
```

```bash
Expand All @@ -46,7 +46,7 @@ By default this package is fully headless: no routes, no controllers, no forced
To get a working blog at `/blog` without writing any controllers, flip the feature flag:

```php
// config/filament-blog.php
// config/ink.php
'features' => [
'public_routes' => true, // /blog, /blog/{slug}, /blog/category/{slug}, /blog/preview/{post}
'feed' => true, // adds /blog/feed (RSS 2.0)
Expand All @@ -62,34 +62,34 @@ Routes register at the service-provider level — no Filament panel boot is requ
Publish the views if you want to customize them:

```bash
php artisan vendor:publish --tag=filament-blog-views
php artisan vendor:publish --tag=ink-views
```

## Documentation

**[Read the full documentation →](https://manukminasyan.github.io/filament-blog/)**
**[Read the full documentation →](https://relaticle.github.io/ink/)**

- [Installation](https://manukminasyan.github.io/filament-blog/getting-started/installation)
- [Frontend Setup](https://manukminasyan.github.io/filament-blog/getting-started/frontend-setup)
- [Blade Components](https://manukminasyan.github.io/filament-blog/essentials/blade-components)
- [Filament Admin](https://manukminasyan.github.io/filament-blog/essentials/filament-admin)
- [MCP Tools](https://manukminasyan.github.io/filament-blog/essentials/mcp-tools)
- [Configuration](https://manukminasyan.github.io/filament-blog/essentials/configuration)
- [Installation](https://relaticle.github.io/ink/getting-started/installation)
- [Frontend Setup](https://relaticle.github.io/ink/getting-started/frontend-setup)
- [Blade Components](https://relaticle.github.io/ink/essentials/blade-components)
- [Filament Admin](https://relaticle.github.io/ink/essentials/filament-admin)
- [MCP Tools](https://relaticle.github.io/ink/essentials/mcp-tools)
- [Configuration](https://relaticle.github.io/ink/essentials/configuration)

## Quick Example (headless)

```blade
{{-- In your blog show page --}}
<x-your-layout>
@push('head')
<x-blog::meta-tags :post="$post" />
<x-blog::feed-link />
<x-ink::meta-tags :post="$post" />
<x-ink::feed-link />
@endpush

<x-blog::structured-data :post="$post" />
<x-blog::post-header :post="$post" />
<x-blog::post-body :post="$post" />
<x-blog::related-posts :post="$post" />
<x-ink::structured-data :post="$post" />
<x-ink::post-header :post="$post" />
<x-ink::post-body :post="$post" />
<x-ink::related-posts :post="$post" />
</x-your-layout>
```

Expand Down
85 changes: 85 additions & 0 deletions UPGRADING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
# Upgrading from `manukminasyan/filament-blog` to `relaticle/ink`

This package was renamed from `manukminasyan/filament-blog` to `relaticle/ink` at version `2.0.0`.

## What changed

| Before | After |
|---|---|
| `manukminasyan/filament-blog` | `relaticle/ink` |
| `ManukMinasyan\FilamentBlog\` | `Relaticle\Ink\` |
| `FilamentBlogServiceProvider` | `InkServiceProvider` |
| `FilamentBlogPlugin` | `InkPlugin` |
| `config/filament-blog.php` | `config/ink.php` |
| `config('filament-blog.X')` | `config('ink.X')` |
| `<x-blog::post-card>` etc. | `<x-ink::post-card>` etc. |
| `view('blog::pages.show')` | `view('ink::pages.show')` |
| `--tag=filament-blog-config` | `--tag=ink-config` |
| `--tag=filament-blog-views` | `--tag=ink-views` |
| `--tag=filament-blog-migrations` | `--tag=ink-migrations` |
| `--tag=filament-blog-translations` | `--tag=ink-translations` |

## What did NOT change

- Database tables stay `blog_posts`, `blog_categories`, `blog_tags`, `blog_post_tag` — **no data migration required**
- Route names stay `blog.index`, `blog.show`, `blog.category`, `blog.preview`, `blog.feed`, `blog.tag`
- URL prefix default stays `/blog` (override via `config('ink.prefix')`)
- All public model methods, component APIs, MCP tool signatures

## Upgrade steps

### 1. Swap the composer dependency

```bash
composer remove manukminasyan/filament-blog
composer require relaticle/ink:^2.0
```

### 2. Update imports and references

From your project root, run:

```bash
# PHP namespaces and class names
find app -type f -name '*.php' -exec perl -i -pe '
s|ManukMinasyan\\FilamentBlog|Relaticle\\Ink|g;
s|FilamentBlogServiceProvider|InkServiceProvider|g;
s|FilamentBlogPlugin|InkPlugin|g;
' {} +

# Config calls
find app config -type f \( -name '*.php' -o -name '*.blade.php' \) -exec perl -i -pe "
s|config\('filament-blog\\.|config('ink.|g;
s|config\(\"filament-blog\\.|config(\"ink.|g;
" {} +

# Blade components and view namespace
find resources -type f -name '*.blade.php' -exec perl -i -pe '
s|<x-blog::|<x-ink::|g;
s|</x-blog::|</x-ink::|g;
s|view\(["'"'"']blog::|view("ink::|g;
' {} +
```

### 3. Republish config (optional — only if you'd published the old one)

If you'd published `config/filament-blog.php`, either:

- **Keep your edits**: `git mv config/filament-blog.php config/ink.php` (config keys are the same)
- **Start fresh**: delete `config/filament-blog.php` and run `php artisan vendor:publish --tag=ink-config`

### 4. Re-publish views (optional)

If you'd published views to `resources/views/vendor/blog/`, rename to `resources/views/vendor/ink/`:

```bash
git mv resources/views/vendor/blog resources/views/vendor/ink
```

### 5. Run tests

Your existing tests should pass without changes (route names, DB tables, model APIs all preserved).

## Need help?

Open an issue at https://github.com/relaticle/ink/issues
18 changes: 12 additions & 6 deletions composer.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,12 @@
{
"name": "manukminasyan/filament-blog",
"description": "Headless blog package for Filament with SEO, MCP tools, and publishable components.",
"name": "relaticle/ink",
"description": "Filament-native content publishing for blog, docs, and AI-citable articles. Headless by default, with opt-in public routes.",
"keywords": ["laravel","filament","blog","cms","headless","mcp","seo","markdown","ink","content"],
"homepage": "https://github.com/relaticle/ink",
"support": {
"issues": "https://github.com/relaticle/ink/issues",
"source": "https://github.com/relaticle/ink"
},
"license": "MIT",
"require": {
"php": "^8.4",
Expand All @@ -15,19 +21,19 @@
},
"autoload": {
"psr-4": {
"ManukMinasyan\\FilamentBlog\\": "src/",
"ManukMinasyan\\FilamentBlog\\Database\\Factories\\": "database/factories/"
"Relaticle\\Ink\\": "src/",
"Relaticle\\Ink\\Database\\Factories\\": "database/factories/"
}
},
"autoload-dev": {
"psr-4": {
"ManukMinasyan\\FilamentBlog\\Tests\\": "tests/"
"Relaticle\\Ink\\Tests\\": "tests/"
}
},
"extra": {
"laravel": {
"providers": [
"ManukMinasyan\\FilamentBlog\\FilamentBlogServiceProvider"
"Relaticle\\Ink\\InkServiceProvider"
]
}
},
Expand Down
File renamed without changes.
4 changes: 2 additions & 2 deletions database/factories/CategoryFactory.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@

declare(strict_types=1);

namespace ManukMinasyan\FilamentBlog\Database\Factories;
namespace Relaticle\Ink\Database\Factories;

use Illuminate\Database\Eloquent\Factories\Factory;
use ManukMinasyan\FilamentBlog\Models\Category;
use Relaticle\Ink\Models\Category;

/** @extends Factory<Category> */
class CategoryFactory extends Factory
Expand Down
8 changes: 4 additions & 4 deletions database/factories/PostFactory.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,13 @@

declare(strict_types=1);

namespace ManukMinasyan\FilamentBlog\Database\Factories;
namespace Relaticle\Ink\Database\Factories;

use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Foundation\Auth\User;
use Illuminate\Support\Str;
use ManukMinasyan\FilamentBlog\Enums\PostStatus;
use ManukMinasyan\FilamentBlog\Models\Post;
use Relaticle\Ink\Enums\PostStatus;
use Relaticle\Ink\Models\Post;

/** @extends Factory<Post> */
class PostFactory extends Factory
Expand Down Expand Up @@ -62,7 +62,7 @@ public function scheduled(): static
*/
protected function resolveAuthorId(): int|string
{
$authorModel = (string) config('filament-blog.author_model', User::class);
$authorModel = (string) config('ink.author_model', User::class);

if (class_exists($authorModel) && method_exists($authorModel, 'factory')) {
return $authorModel::factory()->create()->getKey();
Expand Down
4 changes: 2 additions & 2 deletions database/factories/TagFactory.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@

declare(strict_types=1);

namespace ManukMinasyan\FilamentBlog\Database\Factories;
namespace Relaticle\Ink\Database\Factories;

use Illuminate\Database\Eloquent\Factories\Factory;
use ManukMinasyan\FilamentBlog\Models\Tag;
use Relaticle\Ink\Models\Tag;

/** @extends Factory<Tag> */
class TagFactory extends Factory
Expand Down
4 changes: 2 additions & 2 deletions docs/app.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ export default defineAppConfig({
description: 'Headless blog package for Filament with SEO, MCP tools, and publishable components.',
},
github: {
repo: 'filament-blog',
repo: 'ink',
owner: 'ManukMinasyan',
edit: true,
rootDir: 'docs'
Expand All @@ -23,7 +23,7 @@ export default defineAppConfig({
title: 'On this page',
bottom: {
title: 'Ecosystem',
edit: 'https://github.com/ManukMinasyan/filament-blog',
edit: 'https://github.com/relaticle/ink',
links: [
{
icon: 'i-simple-icons-laravel',
Expand Down
22 changes: 11 additions & 11 deletions docs/content/1.getting-started/1.installation.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,14 @@ navigation:
### Install Package

```bash [Terminal]
composer require manukminasyan/filament-blog
composer require relaticle/ink
```

::alert{type="info"}
For private repositories, add the VCS repository to your `composer.json` first:
```json [composer.json]
"repositories": [
{"type": "vcs", "url": "git@github.com:ManukMinasyan/filament-blog.git"}
{"type": "vcs", "url": "git@github.com:relaticle/ink.git"}
]
```
::
Expand All @@ -41,17 +41,17 @@ This creates `blog_posts`, `blog_categories`, `blog_tags`, and `blog_post_tag` t
### Register Filament Plugin

```php [AppPanelProvider.php]
use ManukMinasyan\FilamentBlog\FilamentBlogPlugin;
use Relaticle\Ink\InkPlugin;

$panel->plugins([
FilamentBlogPlugin::make(),
InkPlugin::make(),
]);
```

### Publish Config (optional)

```bash [Terminal]
php artisan vendor:publish --tag=filament-blog-config
php artisan vendor:publish --tag=ink-config
```
::

Expand All @@ -70,9 +70,9 @@ Most teams porting from the Tapix/FilaForms internal blog packages want public-r

## Default config

After publishing, `config/filament-blog.php` looks like this. Everything is opt-in — defaults match the headless mode, so the package is a no-op until you flip a flag:
After publishing, `config/ink.php` looks like this. Everything is opt-in — defaults match the headless mode, so the package is a no-op until you flip a flag:

```php [config/filament-blog.php]
```php [config/ink.php]
return [
'prefix' => 'blog',
'layout' => 'layouts.app',
Expand Down Expand Up @@ -115,9 +115,9 @@ If your app enforces morph maps, register the blog models:
```php [AppServiceProvider.php]
Relation::enforceMorphMap([
// ...existing entries
'blog_post' => \ManukMinasyan\FilamentBlog\Models\Post::class,
'blog_category' => \ManukMinasyan\FilamentBlog\Models\Category::class,
'blog_tag' => \ManukMinasyan\FilamentBlog\Models\Tag::class,
'blog_post' => \Relaticle\Ink\Models\Post::class,
'blog_category' => \Relaticle\Ink\Models\Category::class,
'blog_tag' => \Relaticle\Ink\Models\Tag::class,
]);
```

Expand All @@ -136,7 +136,7 @@ The schema is identical (`blog_posts` and `blog_categories` table names match).

```bash [Terminal]
composer remove tapix/blog # or filaforms/blog
composer require manukminasyan/filament-blog
composer require relaticle/ink
```

Then enable public-routes mode in config:
Expand Down
Loading