Skip to content

Module Catalog ​

Introduction ​

This page lists every package that ships with kitloom: the modules, the platform packages they stand on, the themes and the admin helpers.

A module is a package that declares itself one (extra.kitloom.module in its composer.json). It shows up on the Modules screen and can be deactivated there without uninstalling it — see Enabling & Disabling Modules. Its domain package's README is the How it works page at the end of its admin section. Most modules keep their data where a WordPress plugin keeps it, so a site moved from WordPress opens with its forms, redirects, fields or products in place.

Licenses ​

Every kitloom package is proprietary, under the kitloom License ("license": "proprietary" in its composer.json). A license buys one edition — Filament or Nova — with the core, every module, the visual editor and the themes; see Pricing.

Modules ​

ModuleDomain packageFilamentNovaCompatible with
Activity Logkitloom/activity-logkitloom/activity-log-filamentkitloom/activity-log-nova—
Ad Pixelskitloom/ad-pixelskitloom/ad-pixels-filamentkitloom/ad-pixels-nova—
Admin Barkitloom/admin-barkitloom/admin-bar-filamentkitloom/admin-bar-novaWordPress's toolbar (Show Toolbar when viewing site)
Admin Menukitloom/admin-menukitloom/admin-menu-filamentkitloom/admin-menu-nova—
AI agentskitloom/aikitloom/ai-filamentkitloom/ai-nova—
AI Writerkitloom/ai-writerkitloom/ai-writer-filamentkitloom/ai-writer-nova—
Analyticskitloom/analyticskitloom/analytics-filamentkitloom/analytics-nova—
Assistantkitloom/assistantkitloom/assistant-filamentkitloom/assistant-nova—
Backupkitloom/backupkitloom/backup-filamentkitloom/backup-nova—
Bookingskitloom/bookingskitloom/bookings-filamentkitloom/bookings-nova—
Commentskitloom/commentskitloom/comments-filamentkitloom/comments-novaWordPress comments, Settings → Discussion
Cookie Consentkitloom/cookie-consentkitloom/cookie-consent-filamentkitloom/cookie-consent-nova—
Courseskitloom/courseskitloom/courses-filamentkitloom/courses-novaLearnPress
Custom Fieldskitloom/custom-fieldskitloom/custom-fields-filamentkitloom/custom-fields-novaAdvanced Custom Fields, Secure Custom Fields
Formskitloom/formskitloom/forms-filamentkitloom/forms-novaContact Form 7, Flamingo
Header & Footerkitloom/header-footerkitloom/header-footer-filamentkitloom/header-footer-nova—
Horizonkitloom/horizonkitloom/horizon-filamentkitloom/horizon-nova—
Image compressionkitloom/media-optimizerkitloom/media-optimizer-filamentkitloom/media-optimizer-nova—
Import & Exportkitloom/import-exportkitloom/import-export-filamentkitloom/import-export-novaWordPress Tools → Import / Export (WXR)
Internal Linkskitloom/internal-linkskitloom/internal-links-filamentkitloom/internal-links-novaRank Math (Link Counter)
Languageskitloom/languageskitloom/languages-filamentkitloom/languages-novaPolylang, WPML (converted)
Link Checkerkitloom/link-checkskitloom/link-checks-filamentkitloom/link-checks-nova—
Listingskitloom/listingskitloom/listings-filamentkitloom/listings-novaHouzez, Listeo
Maintenance modekitloom/maintenancekitloom/maintenance-filamentkitloom/maintenance-nova—
Paymentskitloom/paymentskitloom/payments-filamentkitloom/payments-nova—
Post Typeskitloom/post-typeskitloom/post-types-filamentkitloom/post-types-novaACF 6 post types and taxonomies
Privacykitloom/privacykitloom/privacy-filamentkitloom/privacy-novaWordPress Tools → Export / Erase Personal Data
Pulsekitloom/pulsekitloom/pulse-filamentkitloom/pulse-nova—
Redirectionskitloom/redirectskitloom/redirects-filamentkitloom/redirects-novaRank Math (Redirections, 404 Monitor); imports Redirection, Yoast SEO Premium's redirects
REST APIkitloom/apikitloom/api-filamentkitloom/api-novaWordPress REST API (wp/v2 routes)
Searchkitloom/searchkitloom/search-filamentkitloom/search-nova—
Search & Replacekitloom/search-replacekitloom/search-replace-filamentkitloom/search-replace-nova—
Sentrykitloom/sentrykitloom/sentry-filamentkitloom/sentry-nova—
SEOkitloom/seokitloom/seo-filamentkitloom/seo-novaRank Math; imports Yoast SEO
Shopkitloom/shopkitloom/shop-filamentkitloom/shop-novaWooCommerce (HPOS)
Site Healthkitloom/healthkitloom/health-filamentkitloom/health-nova—
Sliderskitloom/sliderkitloom/slider-filamentkitloom/slider-novaSlide Anything
Social Loginkitloom/social-accountskitloom/social-accounts-filamentkitloom/social-accounts-novaNextend Social Login
Tag Managerkitloom/tag-managerkitloom/tag-manager-filamentkitloom/tag-manager-nova—
Two-Factor Authenticationkitloom/two-factorkitloom/two-factor-filamentkitloom/two-factor-nova—
Webhookskitloom/webhookskitloom/webhooks-filamentkitloom/webhooks-nova—
Widgetskitloom/widgetskitloom/widgets-filamentkitloom/widgets-novaWordPress widgets and dynamic blocks

Modules without "Compatible with" keep their own settings in the options table; several of them import a WordPress plugin's settings, as their sections say.

A module's admin plugs itself in once installed. Every module's admin is left out with a config switch — kitloom-<name>.filament.register, kitloom-<name>.nova.register (for example kitloom-redirects.nova.register). Modules with tools for AI agents turn them off with kitloom-<name>.ai.register.

Activity Log ​

Who changed what and when, on spatie/laravel-activitylog: posts and terms (from the Kitloom\WpSchema\Events events, whatever wrote them), sign-ins and failed sign-ins, options and user accounts, with the address and the user. Entries are kept for the retention set in the admin (90 days by default) and pruned daily.

  • Admin: an Activity Log section — the log, read-only, filtered by user, action, type and date; clearing it (manage_activity_log); a Settings page with the retention.
  • Agents: activity_list.
  • Console: activity-log:prune (--days=), scheduled daily.
  • Requires: spatie/laravel-activitylog 5, PHP 8.4.

Ad Pixels ​

The Meta, TikTok and LinkedIn Insight Tag pixels on the site's pages. With the Shop module the pixels also receive its sales as the networks' standard events (ViewContent, AddToCart, InitiateCheckout, Purchase / CompletePayment). Pixel IDs can be imported from the Meta, TikTok and LinkedIn WordPress plugins and from PixelYourSite.

  • Admin: Ad Pixels → Settings — the IDs, whether signed-in users are tracked, the import.
  • Site: the base code in @siteHead, the <noscript> images in @siteBodyOpen; held back as marketing when Cookie Consent is installed.
  • Console: ad-pixels:import (--from=meta, tiktok, linkedin, pixelyoursite).

Admin Bar ​

WordPress's toolbar on the site, for signed-in users who may enter the admin: the site's title leading to the admin, New with the types the user may add, Edit for the post or term on screen, the user's name and Log Out. A user who turned off "Show Toolbar when viewing site" (show_admin_bar_front) does not get it; guests never do, so a cached page carries nobody's bar. See the guide.

  • Admin: Admin Bar → Settings — the bar on or off (manage_options).
  • Site: the bar through @siteBodyOpen, with its own markup and styles; a Vue theme asks GET /wp-json/admin-bar/v1/edit where Edit leads after moving to another page.
  • Code: an admin of its own tags a Kitloom\AdminBar\Contracts\AdminLinks with AdminLinks::TAG.

Admin Menu ​

The admin menu is not fixed by the packages that build it. An administrator reorders sections and entries by dragging, moves an entry into another section, renames anything, sets icons, hides what the site does not use, restricts an entry to permissions so each role sees its own menu, and in Nova adds sections and links of their own — to a page of the admin or any URL. Reset returns to what the packages build. The edits sit in one table, menu_overrides, one layout per admin, and apply on top of what the application and every module put there; a module installed later lands after the placed entries until someone drags it into place.

  • Admin: Filament Tools → Admin Menu; Nova a drag and drop screen at /nova/admin-menu, with nesting and your own sections and links. Both need manage_options.
  • Code: Kitloom\AdminMenu\MenuEditor (put, replace, forget, clear) — for a migration that arranges the menu, as the Nova skeleton does in WordPress order.

AI agents ​

An MCP server at /mcp, on laravel/mcp, for Claude, Cursor and any other MCP client. The agent works with the rights of the user whose application password it holds: it writes through the same writers the admins use, and is refused what the user may not do. The server is off until AI agents → Settings turns it on; a user needs the use_ai_agents permission.

  • Admin: AI agents → Connect an agent — the server's address and the settings to paste into Claude Code, claude.ai or Cursor (the Filament admin also makes the key there); Settings.
  • Agents: describe_site, list_content, get_content, create_content, update_content, trash_content, restore_content, list_terms, create_term, update_term, trash_term, restore_term, list_media, upload_media, update_media, list_users, list_settings, update_setting, resolve_url, render_page, get_page_schema — plus the tools of the installed modules listed on this page.
  • Console: php artisan mcp:start kitloom serves the same tools over stdio, as the user named in KITLOOM_AI_USER.
  • Requires: laravel/mcp; the REST API module, whose application passwords are the agents' keys.
  • More: AI Agents — connecting Claude Code, Cursor, Claude Desktop and claude.ai, every tool, what agents may not touch.

AI Writer ​

The site's own AI model, on laravel/ai, for the modules that write text: they ask the TextGenerator contract and draw their "with AI" button only while a key is set and the month's budget is not spent. The provider (Anthropic, OpenAI, Gemini, Mistral, DeepSeek, xAI, OpenRouter), its API key — encrypted, never shown back — and the model are saved in the admin or taken from .env; an empty model is the provider's cheapest one.

  • Admin: AI Writer → Usage — every question with its tokens and cost, under the month's spending against the budget; Settings; Test the key — Filament on Settings, Nova on Usage (manage_ai_writer).
  • Requires: laravel/ai.
  • More: AI Writer; how it differs from agents and the assistant — Three Ways to Use AI.

Analytics ​

Google Analytics 4, Plausible, Matomo or Yandex Metrica on the site's pages — one of them or several. With the Shop module, Google Analytics also receives view_item, add_to_cart, begin_checkout and purchase. Settings can be imported from Site Kit, MonsterInsights, Plausible Analytics, Connect Matomo and the Yandex Metrica plugin.

  • Admin: Analytics → Settings — each service's ID, whether signed-in users are counted, the import.
  • Site: the counters in @siteHead, each waiting for statistics consent when Cookie Consent is installed.
  • Console: analytics:import (--from=sitekit, monsterinsights, plausible, matomo, metrika).

Assistant ​

A chat with the site's AI model inside the admin, on laravel/ai: a button in the corner of every admin page opens it over the screen, and each message carries that page, so "this post" is the one being edited. It works with the tools of AI agents — the core ones and every installed module's — as the user chatting, and every change waits for their Approve; a site owner may turn the approvals off on Settings only after accepting full responsibility, and agents cannot change that themselves. The model, key and monthly budget are AI Writer's; each answer is in its Usage with its tokens and cost. The modules' tools wait behind a tool search and the unchanging part of every question is cached, which cuts what a question costs several times over.

  • Admin: the chat on every page (with its conversations, ☰); Assistant → Chat — the conversations on a page of their own; Settings — steps per answer, changes without asking, days to keep conversations (use_assistant, manage_options).
  • Console: php artisan assistant:prune — conversations older than the setting, daily on the scheduler.
  • Requires: AI agents (kitloom/ai) for the tools, AI Writer (kitloom/ai-writer) for the model.
  • More: Assistant; the three ways side by side — Three Ways to Use AI.

Backup ​

Backups of the database and the uploads in one zip archive, on top of spatie/laravel-backup: to this server, S3-compatible storage, SFTP or FTP, on a daily or weekly schedule, kept for as many archives and days as the settings say. Failures are mailed to the site's administration email.

  • Admin: Backups → Backups — the status, the archives on every destination with Download and Delete, Back up now, Rescan; Backups → Settings — what to back up, destinations, retention, schedule.
  • Agents: backup_status, backup_run.
  • Console: kitloom:backup, which the module schedules itself.
  • Requires: spatie/laravel-backup; the database's dump program (mysqldump, mariadb-dump, pg_dump, sqlite3); for a remote destination, its Flysystem adapter, required by the application (league/flysystem-aws-s3-v3, league/flysystem-sftp-v3, league/flysystem-ftp).

Bookings ​

Online appointments for a salon, a barber, a studio or a clinic: services, staff with their hours and time off, free times on the site. A booking is written under a lock, so a time is never taken twice; the staff member gets an email with Confirm and Decline, the client the answer with an .ics calendar file and a reminder before the visit. Clients have cards with their history and notes. Its own tables — not a copy of a WordPress booking plugin. The Atelier theme draws it; see the guide.

  • Admin: a Bookings section — Calendar, Bookings, Clients, Services, Staff, Settings (manage_bookings).
  • Site: the booking page part; free times and bookings under /wp-json/bookings/v1/; the account's appointments (the client's) and schedule (a staff member's day) sections.
  • Agents: bookings_catalog, bookings_slots, bookings_list, bookings_create, bookings_decide, bookings_clients, bookings_client, bookings_client_note.
  • Console: bookings:remind, every fifteen minutes.

Comments ​

Comments under posts and pages as WordPress takes them: the list and the form, replies, pages of comments, and the rules of Settings → Discussion — who may comment, moderation and its keys, closing comments on old posts, the emails to the author and the moderators. A site moved from WordPress keeps its comments and its discussion settings, and WordPress reads what this module writes. Avatars are initials: no Gravatar. See the guide.

  • Admin: Settings → Discussion; the moderation emails link to the admin's Comments screen, where a comment is approved, answered (Reply), marked as spam or trashed.
  • Site: the comments and the form in the page; the form posts to POST /wp-json/comments/v1/comments, with the spam protection the site has.
  • Agents: comments_list, comments_moderate, comments_reply.

A cookie consent banner with four categories — functional, preferences, statistics, marketing. Trackers of other modules wait for the visitor's yes: they pass their markup through ScriptConsent::gate() of kitloom/site, which this module answers. Google Consent Mode v2 is a switch. Banner settings can be imported from Complianz and CookieYes.

  • Admin: Cookie Consent → Settings — the banner, texts, categories, cookie policy, colours, Google Consent Mode, the import.
  • Site: the banner through @siteHead and @siteFooter; the [cookie-consent] shortcode (and Complianz's [cmplz-manage-consent]) for a button that opens the preferences; window.kitloomConsent and the kitloom:consent event for the theme's scripts.
  • Console: cookie-consent:import (--from=complianz or cookieyes).

Courses ​

Online courses on LearnPress's data: a curriculum of sections, lessons and quizzes, students who work through it at their own pace, quizzes marked on the server, and paid courses sold by a Shop product. A site that ran LearnPress keeps its courses, students and their progress. The Lyceum theme draws it; see the guide.

  • Admin: a Courses section — Courses, Lessons, Quizzes, Questions, Categories, Tags, Settings.
  • Site: the courseCatalog, courseDetails, lesson and quiz page parts; enrolling, lessons done and quizzes under /wp-json/courses/v1/; the account's courses section.
  • Agents: courses_list, courses_get, courses_save, courses_enroll, courses_students.
  • Requires: the Shop module to sell courses; free courses work without it.

Custom Fields ​

Field groups and custom fields on the data model of Advanced Custom Fields and its fork Secure Custom Fields: all 37 field types, PRO ones included, location rules and conditional logic. Values sit under the plugin's meta keys, so a site moved from WordPress keeps its fields and values.

  • Admin: Custom Fields → Field Groups, and the fields of the matching groups on post, term and user forms.
  • Code: $post->field('subtitle'), $post->setField('subtitle', $value, $user); the Kitloom\CustomFields\Facades\Fields facade (Fields::get(), Fields::set(), Fields::option('footer_text')); Groups\GroupWriter writes a group from the array the plugin exports. A module adds a field type by implementing Types\FieldType and tagging it Types\FieldTypes::TAG.
  • Agents: fields_get, fields_set.

Forms ​

Contact forms in the Contact Form 7 format — the form template with its form-tags, the two mails, the messages and additional settings — and the messages they receive, kept the way Flamingo keeps them. Mail goes through the application's mailer, queued. Spam protection: a honeypot (spatie/laravel-honeypot) and Cloudflare Turnstile.

  • Admin: Filament a Contact section, Nova Contact Forms — the forms in the plugin's tabs (Form, Mail, Mail (2), Messages, Additional Settings), the messages, and a Settings page for spam protection.
  • Front end: [contact-form-7 id="…"] (and the older [contact-form id="…"]), its form-tags as field shortcodes ([text], [email], [textarea], [select], [submit]…). The theme posts the fields to POST /wp-json/contact-form-7/v1/contact-forms/{id}/feedback and gets the plugin's JSON answer.
  • Agents: forms_list, form_get, form_update, submissions_list, submission_spam.
  • Requires: spatie/laravel-honeypot.

Code snippets pasted in the admin — a tag, a pixel, a chat widget, a verification <meta> — on every page of the site: in <head>, right after <body> or before </body>. Each snippet has a consent category, so Cookie Consent holds it back until the visitor agrees. The snippets are one option, header_footer_snippets.

  • Admin: Header & Footer → Settings, behind the manage_header_footer permission.
  • Site: the snippets in @siteHead, @siteBodyOpen and @siteFooter.

Horizon ​

Laravel Horizon on a site whose queue is on Redis: the workers and their dashboard. The module opens the dashboard (/horizon) to users with the view_horizon permission and schedules horizon:snapshot.

  • Admin: Horizon → Dashboard — a link to Horizon's dashboard with a status badge (running, paused, not running, Redis is down, queue not on Redis).
  • Console: Horizon's own commands — horizon under a process manager, horizon:terminate on every deploy, horizon:status.
  • Requires: laravel/horizon, Redis, the pcntl and posix PHP extensions.

Image compression ​

Every image size the media library cuts — and the -scaled copy of a large photo — goes through the compression tools on the server before it is written: jpegoptim, pngquant, optipng, gifsicle, cwebp. Originals are left as uploaded. The package binds Kitloom\Media\Contracts\ImageOptimizer of kitloom/media.

  • Admin: Image compression → Status — which tools this server has, and the install commands for the missing ones.
  • Agents: media_optimizer_status.
  • Console: media:optimizers lists the tools; media:regenerate (kitloom/media) cuts the sizes of existing images again, compressed.
  • Requires: spatie/image-optimizer; the tools themselves, each optional. MEDIA_OPTIMIZE=false turns compression off.

Import & Export ​

Site content as a WXR file — the format of WordPress's Tools → Import / Export. A file exported here opens in WordPress's importer and the other way round. Authors are matched by login or email; a post already on the site is recognised by its guid and updated when it changed.

  • Admin: Filament Tools → Import (queued, with a history) and Tools → Export; Nova an Import & Export section — the import history with an export action.
  • Agents: imports_list, import_get, import_start.
  • Console: import-export:export (--post-type=, --status=, --category=, --author=, --start=, --end=) and import-export:import (--author=, --attachments, --skip-existing), which runs at once, without the queue.
  • Requires: kitloom/media to download attachments.

Rank Math's Link Counter on its own tables (rank_math_internal_links, rank_math_internal_meta): every post's internal and external links, and how many links of other posts lead to it. A site moved from WordPress keeps its counts.

  • Admin: a links column in post lists; an Internal Links section with the posts and their counts, the links themselves and the orphans — published posts nothing links to. Permission view_internal_links.
  • Console: internal-links:recount, as Rank Math's "Update Links".

Languages ​

The site in more than one language. A record is written once, in the default language; a translation into another language is laid over it — title, text, excerpt, slug, custom fields — and the original shows wherever nothing is translated. A translated page has its own address under the language's prefix (/fr/a-propos/). Menus, the site's title and tagline and a theme's texts are translated too. A Polylang or WPML site is converted. See the guide.

  • Admin: a Languages section — Settings (the languages, the default one) and Site Texts; a Translations block with a tab per language on post and term forms (in Filament the user's too), a Translations column on the lists; Translate with AI on a record and as a bulk action, with AI Writer.
  • Agents: languages_list, languages_get_translations, languages_save_translation, languages_translate.
  • Console: languages:convert (--from=polylang, wpml or auto, --default=, --dry-run); languages:demo.
  • Requires: the Custom Fields module and kitloom/navigation.

Broken Link Checker for the posts: every link Internal Links finds is asked what it answers — on a schedule, and as soon as a post is saved — and the ones that fail are listed with the posts that carry them. The site's own addresses are checked without a request; other hosts only when they are public. See the guide.

  • Admin: a Link Checker section — Broken Links, All Links, Settings; Check again, Dismiss, Unlink, and Replace URL in every post at once (manage_link_checks).
  • Agents: link_checks_list, link_checks_recheck, link_checks_dismiss, link_checks_replace.
  • Console: link-checks:check (--all), hourly; link-checks:digest, daily — the links that broke, emailed when the setting is on.
  • Requires: the Internal Links module.

Listings ​

Real estate and directory listings in one module: properties for sale or rent with their agents and agencies, on Houzez's data; places, services and events with hours and reviews, on Listeo's. Visitors search with filters and a map, save what they like and send enquiries that reach the right person by email. A site that ran either theme keeps its listings, agents and leads. The Keystone and Waypoint themes draw it; see the guide.

  • Admin: a Listings section — Properties, Agents, Agencies, Listings, Enquiries, their terms, Settings.
  • Site: the listingSearch, listingDetails and agentProfile page parts; the map's points, enquiries, reviews and favorites under /wp-json/listings/v1/; the account's favorites and enquiries sections.
  • Agents: listings_search, listings_get, listings_save, listings_enquiries, listings_enquiry_status.
  • Console: listings:reindex rebuilds the search index.

Maintenance mode ​

A coming soon page (200) or a maintenance page (503 with Retry-After) for visitors while you work on the site. The admin stays open; the roles you choose, and anyone with the access link, see the site as it is. The page is the theme's coming-soon template; a theme without one gets a plain page. See the guide.

  • Admin: Maintenance → Settings — the mode, the roles that still see the site, the headline, text and image, the access link (manage_maintenance_mode).
  • Site: every address answers with the holding page; signing in and the account forms stay open; the REST API tells a headless front end the mode as JSON.
  • Agents: maintenance_settings_get, maintenance_settings_update.

Payments ​

Payments for any model: an order, an invoice or a booking implements Kitloom\Payments\Contracts\Payable, uses the HasPayments trait, and $order->pay('stripe') sends the payer to the gateway. Built on fomvasss/laravel-billing — Monobank, LiqPay, WayForPay, Hutko, Stripe, Paddle — plus offline methods (bank transfer, cash on delivery). The Shop pays through it.

  • Admin: a Payments section — the payments, with Mark paid, Cancel and Refund; the methods' settings with their keys, stored encrypted in the site's options.
  • Site: the gateways' webhooks (POST billing/webhooks/{gateway}), the payer's return and landing page, a permanent pay link (billing/pay/{payment}); the Blade components <x-payments::methods /> and <x-payments::pay-button />.
  • Console: payments:install — checks the queue and prints the webhook addresses to register at each gateway.
  • Requires: fomvasss/laravel-billing, PHP 8.4, Laravel 12 or 13.

Post Types ​

Post types and taxonomies created in the admin and stored the way ACF 6 stores them (acf-post-type and acf-taxonomy records). The package reports them to the post type and taxonomy registries, so menus, SEO, the sitemap and permissions pick them up, and a type viewable on the site gets addresses and archives — see Extension Points.

  • Admin: Custom Fields → Post Types and Taxonomies; every type gets an admin section of its own with its records.
  • Agents: post_types_list, post_types_get, post_types_create, post_types_update, post_types_trash, post_types_restore.
  • Requires: in Nova, the Custom Fields admin (kitloom/custom-fields-nova), whose section holds the definitions.

Privacy ​

WordPress's Export Personal Data and Erase Personal Data: the owner adds a request for an email address, the person confirms it from an email, and the site exports — a zip with a page to read and the same as JSON, sent as a link that works for three days — or erases what every module keeps about them, with a report of what went and what was kept and why. Requests are WordPress's own user_request rows, so those made before the move are there. Users and comments are handled as WordPress handles them; other modules add their data through a personal data exporter and eraser. See the guide.

  • Admin: Privacy → Export Personal Data and Erase Personal Data; WordPress's export_others_personal_data and erase_others_personal_data capabilities.
  • Commands: privacy:prune, daily — old archives deleted, requests nobody confirmed marked failed.

Pulse ​

A performance dashboard on Laravel Pulse, in the site's own database: slow pages, slow queries, exceptions, queues, the cache, and — with pulse:check running — the servers. Its Slow Pages card names pages by the template hierarchy (single-book, archive-book, 404…) instead of one fallback route.

  • Admin: Pulse → Dashboard (Pulse's own page, /pulse, for the view_pulse permission) and Pulse → Settings — recording, sampling, thresholds, how many days are kept.
  • Console: Pulse's own — pulse:check under a process monitor, pulse:restart after a deploy.
  • Requires: laravel/pulse, which brings Livewire (into a Nova application too).

Redirections ​

Rank Math's Redirections and 404 Monitor on its own tables and settings: rules with several sources each (exact, contains, starts, ends, regex), 301/302/307 and 410/451, the 404 log in simple or advanced mode, and the Auto Post Redirect setting, which leaves a rule behind when a record's address changes.

  • Admin: a Redirects section — Redirections, 404 Monitor, Settings. Permissions manage_redirections, manage_404_log.
  • Site: a middleware the module puts into the web group itself; rules apply before the page is resolved.
  • Agents: redirects_list, redirects_create, redirects_update, redirects_trash, redirects_settings_get, redirects_settings_update, not_found_list, redirect_from_404.
  • Coming from Redirection: Settings → Import from Redirection takes the plugin's rules once, with their hits and order; redirects:import --dry-run shows what comes over and what stays behind.
  • Coming from Yoast SEO Premium: Settings → Import from Yoast SEO Premium takes Premium's redirects once as rules; a source with a rule of its own here keeps it; redirects:import --from=yoast --dry-run shows what comes over.

REST API ​

The WordPress REST API under /wp-json/wp/v2/ — post types, taxonomies, posts, pages and any shown type, terms, media and users/me — with WordPress's JSON for the core fields, its query parameters, pagination headers and errors. Application passwords are laravel/sanctum tokens, sent as a Bearer token or as Basic auth the way WordPress clients send them. See Headless & APIs.

  • Admin: REST API → Application Passwords (each user their own, manage_options everyone's) and REST API → Settings — on or off, the rate limit, the post types and taxonomies shown.
  • Site: the wp/v2 namespace under the site's REST root; a request without a password sees what a visitor sees.
  • Requires: laravel/sanctum.

Site search on Laravel Scout: an index (search_documents) of the published posts a visitor may find, kept in step with the content events, ranked by where a word is found — the title, the post's terms, the text. It searches the site's database by default, or Meilisearch, Typesense or Algolia by configuration (KITLOOM_SEARCH_ENGINE). Until the index is built once, the site keeps its own search.

  • Admin: Search → Settings — the index's status and Rebuild index, the searchable post types, the weights.
  • Site: the site's search page asks the index for its results; its address and links stay the main query's.
  • Agents: search_status, search_reindex.
  • Console: search:reindex (--queue).
  • Requires: laravel/scout; the engine's client for Meilisearch, Typesense or Algolia.

Search & Replace ​

Search and replace across the site's tables, as Better Search Replace does it: posts, meta, comments, terms, options and user meta. Serialized values are changed without unserializing them. A run is a dry run unless told otherwise; runs from the admin are kept with who ran them and their report.

  • Admin: Filament and Nova: a Search & Replace section of its own (Replacements, How it works). Permission manage_search_replace.
  • Console: search-replace {search} {replace} — a dry run; --run writes. --table=, --case-insensitive, --guids.

Sentry ​

The site's errors and performance in Sentry — sentry.io, a self-hosted Sentry or GlitchTip — with the DSN set in the admin. Pages are named by the template hierarchy, events carry the page and the content saved just before. A copy of the settings on each server (storage/app/kitloom-sentry.json) reports errors even when the database is down.

  • Admin: Sentry → Settings — DSN, environment, traced requests, browser errors, Send test event.
  • Site: optionally Sentry's browser SDK on the theme's pages, through @siteHead.
  • Requires: sentry/sentry-laravel.

SEO ​

SEO the way Rank Math does it, on Rank Math's options and meta: titles and descriptions from a record's meta or its type's template, robots, canonical, Open Graph and Twitter tags, schema.org markup, breadcrumbs, XML sitemaps, robots.txt, webmaster verification and instant indexing (IndexNow, Google's Indexing API).

  • Admin: an SEO section — General Settings, Titles & Meta, Sitemap Settings, Instant Indexing — and an SEO block on post and term forms.
  • Site: the head and schema page parts; the rest of the head through @siteHead; /sitemap_index.xml and the per-type sitemaps, /robots.txt, /google{code}.html, the IndexNow key file; the [rank_math_html_sitemap] (and [sitemap]) shortcode.
  • Agents: seo_get, seo_update.
  • Console: seo:submit-urls {urls*} (--google, --deleted); seo:import --from=yoast (--dry-run).
  • Coming from Yoast SEO: General Settings → Import from Yoast SEO takes Yoast's titles, descriptions, robots, canonicals and social meta of posts, terms and authors, and its settings, once into Rank Math's keys; only what is empty here is filled.

Shop ​

A shop on WordPress data in WooCommerce's format: products with their categories and tags, the cart, checkout with online and offline payment, and orders in WooCommerce's HPOS tables — a live WooCommerce shop opens as it is. It publishes its sales (view_item, add_to_cart, begin_checkout, purchase) for Analytics, Tag Manager and Ad Pixels.

  • Admin: a Shop section — Orders, Customers, Coupons, All Products, Categories, Tags, Attributes, Shipping, Shipping classes, Tax rates, Settings.
  • Front end: product, category and tag pages at WooCommerce's addresses (/product/…, /product-category/…); the [products], [product_categories], [woocommerce_cart] and [woocommerce_checkout] shortcodes; the cart and checkout under /wp-json/wc/store/v1/ (cart, cart/add-item, cart/update-items, cart/remove-item/{key}, cart/select-shipping-rate, checkout).
  • Agents: products_list, product_get, product_save, product_category_image, attributes_list, attribute_save, orders_list, order_get, order_set_status, order_add_note, sales_report, top_products, customers_list, coupons_list, coupon_save.
  • Console: shop:demo fills a site with a demo shop. The Marketplace theme is built on it.
  • Requires: the Payments module, PHP 8.4, Laravel 12 or 13.

Site Health ​

WordPress's Site Health on spatie/laravel-health: database, cache, Redis, disk space, writable folders, PHP version, environment, debug mode, cached configuration, the queue worker and the scheduler. The checks run every five minutes; failures are mailed to the site's administration email. Other modules add checks through spatie's own Health::checks().

  • Admin: Site Health — the overall status, every check, Run checks now, the email alerts switch.
  • Agents: health_report, health_run.
  • Console: spatie's health:check, which the module schedules.
  • Requires: spatie/laravel-health.

Sliders ​

Sliders in the Slide Anything format, directly on the WordPress data: the sa_slider post type, slides and settings in post meta, where the plugin keeps them. A slider saved here opens in WordPress, and the other way round.

  • Admin: a Sliders section.
  • Front end: [slide-anything id="12"] or [slide-anything slug="header"] gives the theme the slides and the carousel settings; the package ships a Glide-based Vue component, resources/js/SlideAnything.vue.
  • Agents: sliders_list, slider_get, slider_save.

Social Login ​

Sign-in with Google or GitHub on the site, through Laravel Socialite. Accounts are linked to WordPress users in Nextend Social Login's social_users table, so a site that comes from WordPress keeps its visitors' links. New users are created only while registration is open; a user with two-factor authentication still types the code.

  • Admin: a Social Login section — linked accounts, and Settings with each service's keys (the secret stored encrypted); in Filament also the linked accounts on a user's screen.
  • Front end: GET /auth/{provider}, /auth/{provider}/callback, DELETE /auth/{provider}; the [nextend_social_login] shortcode and SocialLogin::buttons() give the theme the buttons.
  • Requires: laravel/socialite.

Tag Manager ​

Google Tag Manager containers on the site's pages, with a data layer under GTM4WP's variable names (pagePostType, pagePostType2, pageCategory…), so a container built for the WordPress site keeps working. With the Shop module the data layer gets the GA4 e-commerce events. Settings can be imported from GTM4WP and Site Kit.

  • Admin: Tag Manager → Settings — containers, the consent they wait for, data layer, server-side domain and environment, the import.
  • Site: the data layer and loader in @siteHead, the <noscript> frame in @siteBodyOpen.
  • Console: tag-manager:import (--from=gtm4wp, sitekit).

Two-Factor Authentication ​

A second factor after the password: a code from an authenticator app or one mailed to the user, recovery codes, and roles that must use it. The factors are user meta; nothing is added to the users table.

  • Admin: Filament Filament's own multi-factor authentication — the challenge, setup on the profile, the reset for another user; Nova Nova's two-factor screens (Laravel Fortify), the authenticator app only. In both, Two-Factor Authentication → Settings — the required roles and the methods.
  • Site: after POST /login, the theme draws the code form and posts it to /two-factor-challenge (/two-factor-challenge/email mails a code).
  • Console: two-factor:reset {user} — every factor off, for a user who cannot sign in.
  • Requires: pragmarx/google2fa.

Webhooks ​

Outgoing webhooks to Zapier, Make, n8n or any address: when a post is published, a comment posted, an order placed or a booking made, the site POSTs a signed JSON body (X-Kitloom-Signature, HMAC-SHA256) from the queue, retries it and logs every delivery. Topics are named as WooCommerce names them (order.created); a webhook that keeps failing is paused. Only public addresses are called. On spatie/laravel-webhook-server; see the guide.

  • Admin: a Webhooks section — Webhooks (with Send test), Deliveries, Settings (manage_webhooks).
  • Agents: webhooks_list, webhooks_create, webhooks_update, webhooks_deliveries.
  • Console: webhooks:prune (--days=), daily.
  • Code: a module adds a topic of its own — a WebhookTopic tagged WebhookTopic::TAG.
  • Requires: spatie/laravel-webhook-server.

Widgets ​

WordPress's standard widgets drawn on the site with WordPress's markup — Recent Posts, Recent Comments, Calendar, Categories, Archives, Navigation Menu, Search, Tag Cloud, Image, Pages, Meta — each with its settings where WordPress keeps them (widget_{type} options). Eight of them are also WordPress's dynamic blocks (core/latest-posts, core/latest-comments, core/calendar, core/archives, core/categories, core/search, core/tag-cloud, core/page-list), drawn wherever they are saved: a sidebar, a post, a pattern.

  • Admin: the widgets' forms on the widgets page (Filament Appearance → Widgets, Nova Settings → Widgets); without the module these widgets are shown read-only.
  • Zones: added, renamed and removed on the same page — no register_sidebar() in the theme; see Menus & Widgets.
  • Agents: widgets_list, widgets_save.
  • Front end: a shortcode per widget — [recent_posts], [recent_comments], [calendar], [categories], [archives], [nav_menu], [search], [tag_cloud], [media_image], [pages], [meta] — with the widget's settings as attributes.

Platform packages ​

Always loaded; not on the Modules screen. The other packages stand on them — see Core packages and modules.

PackageFilamentNovaWhat it gives, what the admin shows
kitloom/wp-schemakitloom/wp-schema-filamentkitloom/wp-schema-novaThe WordPress data model. Admin: Posts, Pages, Comments, Categories, Tags, the Settings pages, the widgets page with its zones added in the admin (Menus & Widgets), and the admins' base classes (FormSections, HtmlEditor, MenuOrder). Console: wordpress:install
kitloom/sitekitloom/site-filamentkitloom/site-novaThe public site, the Blade engine and the REST root /wp-json/. Admin: Appearance → Themes
kitloom/site-inertia——The Vue engine for themes (Inertia)
kitloom/settingskitloom/settings-filamentkitloom/settings-novaOptions (Settings, SettingWriter). Admin: the base of the modules' settings pages. Console: settings:list
kitloom/shortcodeskitloom/shortcodes-filamentkitloom/shortcodes-novaShortcodes, [sidebar] and [widget]. Admin: Settings → Shortcodes — every shortcode with its arguments, and the tags no handler takes
kitloom/mediakitloom/media-filamentkitloom/media-novaAttachments and image sizes; the [gallery], [caption], [audio], [video], [playlist], [embed] shortcodes. Admin: Media → Library, and the library window the admin's file pickers open (the featured image too). Console: media:regenerate
kitloom/navigationkitloom/navigation-filamentkitloom/navigation-novaWordPress menus and their locations — locations added in the admin, not registered in the theme (Menus & Widgets). Admin: Menus and Menu Locations. Agents: menus_list, menu_get, menu_save
kitloom/moduleskitloom/modules-filamentkitloom/modules-novaModules as plugins. Admin: Modules → Installed Modules and each module's How it works. Console: kitloom:make-module, kitloom:make-theme
kitloom/access——Admin sections and the permissions that open them (Permission::PROVIDER_TAG)
kitloom/permissionskitloom/permissions-filamentkitloom/permissions-novaRoles and permissions on spatie/laravel-permission. Admin: Users → Roles and the Role field on the user form
kitloom/sandbox——Throwaway copies of a demo site, one per visitor. Console: sandbox:create, sandbox:prune, sandbox:template

Themes ​

Descriptions, screenshots and demos: Theme Catalog.

PackageThemeEngineWhat it is
kitloom/blade-themeBladeThemeBladeThe base Blade theme: the whole page rendered on the server, no build step. Console: blade:demo
kitloom/portfolio-themePortfolioInertia (Vue)A design studio's portfolio. Console: portfolio:demo
kitloom/marketplace-themeMarketplaceBladeA shop on the Shop module, with prebuilt Tailwind CSS. Console: marketplace:demo
kitloom/game-reviews-themeGameReviewsInertia (Vue)A video game review site on Custom Fields and Post Types; player ratings and live search under /wp-json/game-reviews/v1/. Console: game-reviews:demo
kitloom/journal-themeJournalInertia (Vue)A personal blog after Start Bootstrap's Clean Blog: photo headers from featured images, a contact form. Console: journal:demo
kitloom/bureau-themeBureauInertia (Vue)A one-page agency site after Start Bootstrap's Agency, its sections edited on the front page. Console: bureau:demo
kitloom/saffron-themeSaffronInertia (Vue)A food blog: recipes with a printable card, cuisines, kitchen notes. Console: saffron:demo
kitloom/parsec-themeParsecInertia (Vue)A dark news magazine for games, space and tech, with banner zones for ads. Console: parsec:demo
kitloom/pantry-themePantryInertia (Vue)A food store on the Shop module: product rows with quantity, category tiles, cart and checkout. Console: pantry:demo
kitloom/quire-themeQuireInertia (React)A stationery shop on the Shop module, in every language of the Languages module. Console: quire:demo
kitloom/atelier-themeAtelierInertia (Vue)A salon on the Bookings module, phones first: services, the team, a portfolio, online booking. Console: atelier:demo
kitloom/keystone-themeKeystoneInertia (Vue)A real estate agency on the Listings module: search with a map, property pages, agents and agencies. Console: keystone:demo
kitloom/waypoint-themeWaypointInertia (Vue)A city guide on the Listings module: places by category and neighbourhood, a search beside a map, reviews. Console: waypoint:demo
kitloom/lyceum-themeLyceumInertia (Vue)An online school on the Courses module: a catalog, a lesson player, timed quizzes, My courses. Console: lyceum:demo

The Blade engine is part of kitloom/site; Vue and React themes need kitloom/site-inertia. See Themes.

Admin helpers ​

Packages for one admin that are not modules: they are not on the Modules screen.

PackagePanelWhat it does
kitloom/visual-editor-filamentFilamentTinyMCE 6 for post and page text, the product description and WYSIWYG custom fields, with WordPress markup kept as it is; Add Media from the library
kitloom/visual-editor-novaNovaThe same in Nova, in place of the code editor of kitloom/wp-schema-nova

Both bind the HtmlEditor contract of their admin's base package, so installing one is all it takes — see The HTML editor.

kitloom — modules and themes for Laravel.
Pricing · Services · License · Refunds · Privacy · Community · [email protected]