Knowble

Filament plugin

Knowble

A help centre and contact support for Filament panels.

Your customers read help articles and send requests from inside your app. Your team answers each request in a staff panel.

Filament 5 · Laravel 12 or 13 · PHP 8.3 or later
Stringline, PISTON and Oversite run on it.

01Help centre

A help centre inside your panel

Your customers read articles, how-tos and questions without leaving your app. The help is filed in sections and screens that match your app's sidebar.

Drawn example: help home, with search
Drawn example: a how-to
  • Search with type and area filters.
  • Help home with tiles for each section, and Popular, Recently updated, Questions and Favourites.
  • On every article: previous and next, related articles, "Did this help?", a favourite star, Suggest an improvement, and Print to PDF.
  • How-tos have numbered steps, screenshots appear at one consistent scale, and code shows in a labelled panel with a Copy button.

A Help button on any screen

Add HelpAction::for('how-do-i-send-an-invoice') to a page and its header gets a Help button that opens that article. The button stays hidden until the article is published, so a screen can name its article before it's written.

Drawn example: a screen with its Help button

Help articles in your repository

Articles are a JSON file with an images folder beside it, committed with your code and loaded on deploy with php artisan knowble:import. Every environment shows the same help. To write articles in the staff panel, switch on the editor: knowble:export then writes your edits back to the file.

php artisan knowble:import

02Contact support

Contact support and the Requests queue

Your customers send a request from Contact support, in the same panel as the help centre. Your team answers in a staff panel, and each reply appears live in the customer's Your requests.

Drawn example: Contact support suggesting articles
Drawn example: a request's conversation
  • Matching articles appear as somebody types their question.
  • Attachments on every message, with pictures shown as previews in the conversation.
  • Your requests lists each request with its conversation, and a badge for unread replies. A reply can be changed for a few minutes after it's sent.
Drawn example: the Requests queue
Drawn example: the Support report
  • The Requests queue has priority, status, an internal note, help articles linked in a reply, and a clock for how long each customer has waited.
  • The Support report shows what came in, what was resolved, how fast the first reply was, and who's waiting longest.
  • Add the staff screens to an admin panel you already have, or to a panel just for support.
  • Optional extras: support tiers for each customer, an article editor, a suggestions queue, and reads, ratings and favourites for each article.

03Notifications

Notifications by email and in the bell

Knowble emails your team about each new request, each customer reply and each suggestion, and emails a customer when your team replies. Switch on features.in_app and each one also goes in Filament's bell, or only in the bell.

  • Choose the channels for each notification in config.
  • Knowble asks your host class before sending each one, so your app can let each person turn them off.
  • Listen for RequestSubmitted and ReplySent to do anything else.
Drawn example: the bell, and the email for the same reply

04Multi-tenant

Single-database or multi-tenant

With nothing set, Knowble works in an app with one database and no tenants. In a multi-tenant app, one host class tells it who the tenant is. It doesn't depend on any tenancy package, and the docs have an example for stancl/tenancy.

  • Everything a customer writes is stored against their tenant and their user.
  • Knowble::forgetTenant() deletes a tenant's requests, files, suggestions and reading history.
use Polycode\Knowble\Hosts\SingleApp;

class AppKnowbleHost extends SingleApp
{
    public function tenantId(): ?string
    {
        return tenancy()->initialized
            ? (string) tenant('id')
            : null;
    }
}
From the docs: the host for an app on stancl/tenancy

05Time zones and languages

Each reader's time zone and language

Times show in each person's own zone, set with FilamentTimezone, and reports count whole days where the reader is. Month names follow your app's language, and the date formats are in config.

  • Every string goes through __(), so lang/en.json can reword any of it.
  • Publish the views and the email template to change them.
Drawn example: one reply, read in Auckland and in New York

06Config over convention

Every feature switches off

Turn off any feature your app doesn't need, such as contact support or favourites. Every page's label, icon, group, position and placement (sidebar, user menu or hidden) can be changed in config or in code.

  • It works with nothing set: no published config, no host class and no staff panel.
  • It takes its colours from your panel, dark mode included, on Filament's default theme.
Some of the feature switches, as they're set by default

07Security

Each customer sees only their own requests

  • RequestsCustomer pages are scoped to this tenant and this person, including a request number typed into the address bar.
  • ConversationsEach conversation works out on the server which side it's on, from the panel it's in, and checks access again on every action.
  • AttachmentsFiles sit on a private disk with no route of their own, and stream only from their own conversation. A picture is checked by its contents before it's shown.
  • Rate limitsEach customer can send five requests, and five suggestions, every ten minutes.
  • SearchWildcards typed into a search are matched literally.
  • TestsEvery push runs the suite on PHP 8.3, 8.4 and 8.5, each with Laravel 12 and 13, in single-database and multi-tenant apps.

To report a security problem, email hello@polycode.co.nz.

08Install

Install Knowble

The installer publishes the config and migrations, starts your help file with an example article, and migrates if you ask.

  1. Install the package
    composer require polycode/knowble
  2. Run the installer, and choose what you want
    php artisan knowble:install
  3. Register the plugin on your customers' panel
    ->plugin(KnowblePlugin::make())

The docs cover the staff panel, writing your help, and every setting. Knowble needs Filament 5, Laravel 12 or 13 and PHP 8.3 or later.

09Pricing

Pricing is coming soon

Email hello@polycode.co.nz and we'll tell you when you can buy Knowble.

Each project needs a licence. A project is one application, including its staging, testing and development copies. The terms are in the licence.

10Questions

Will my customers see the name Knowble?

No. The customer pages, emails and PDFs use your app's name and colours. Knowble's name appears in your code and config.

Do I need a staff panel?

Requests work without one: your team is emailed each request. To answer in the app, add the staff plugin to an admin panel you already have, or create a panel just for support.

Which tenancy package does it work with?

Any of them. Knowble asks one host class who the tenant is, and the docs have an example for stancl/tenancy.

Can I use it in an app I build for a client?

Yes. The licence then belongs to that project, and your client can keep using it.

What happens when my licence runs out?

You keep the version you have, for as long as you like. Updates come while your licence is current.

Where do I ask something else?

Email hello@polycode.co.nz.