relaticle/ink
Filament-native content publishing for Laravel: Eloquent models, full admin for posts/categories, SEO + JSON-LD, RSS, search, Blade UI components, and 13 MCP tools for AI agents. Headless by default with optional public blog routes.
All components are publishable. Run php artisan vendor:publish --tag=ink-views to customize.
Renders Open Graph, Twitter Card, and article meta tags in <head>.
[@push](https://github.com/push)('head')
<x-ink::meta-tags :post="$post" />
[@endpush](https://github.com/endpush)
Renders: og:title, og:description, og:type, og:image, article:published_time, article:author, article:section, twitter:card, twitter:title, twitter:image, canonical
Renders JSON-LD BlogPosting schema with publisher and breadcrumb data.
<x-ink::structured-data :post="$post" />
Renders: [@type](https://github.com/type): BlogPosting with headline, description, datePublished, dateModified, author, publisher (from config), articleSection, articleBody, and image.
Renders RSS <link> tag in <head>. Only renders if blog.feed route exists and feed is enabled in config.
[@push](https://github.com/push)('head')
<x-ink::feed-link />
[@endpush](https://github.com/endpush)
Renders full RSS 2.0 XML. Use in your feed route view:
{{-- resources/views/blog/feed.blade.php --}}
<x-ink::feed :posts="$posts" />
Displays a post in a listing. Shows category badge, date, title, excerpt, and featured image thumbnail.
<x-ink::post-card :post="$post" />
Renders category badge, title, author name, published date, and estimated read time.
<x-ink::post-header :post="$post" />
Renders featured image and markdown content in a Tailwind prose container with dark mode support.
<x-ink::post-body :post="$post" />
Shows related posts section. Only renders if the collection is not empty.
<x-ink::related-posts :posts="$relatedPosts" />
Displays a category pill. Links to category page if blog.category route exists.
<x-ink::category-badge :category="$post->category" />
<x-ink::category-badge :category="$post->category" :linked="false" />
Sticky amber banner for draft previews. Pushes noindex meta tag.
<x-ink::preview-banner :post="$post" :editUrl="$editUrl" />
The package ships a numbered, aria-labeled pagination view used by the index/category/tag pages. To use it in your own views:
{{ $posts->links('ink::pagination.blog') }}
The view emits aria-label="Blog pagination" on the nav, aria-current="page" on the active page, and wire:navigate on every link.
Drop <livewire:blog::search /> anywhere. It reads ?q= from the URL, debounces 400ms, and renders up to 20 matching posts. Empty queries show no results until the user types.
How can I help you explore Laravel packages today?