Fewchurs
Docs / Laravel

Laravel

Add a feature request board to your Laravel app. One package, one env var, one Blade tag.

Needs PHP 8.2 or later and Laravel 10, 11, 12 or 13. No JavaScript build step and no Tailwind needed.

Install

  1. Add the package

    composer require fewchurs/laravel
  2. Publish the config

    php artisan fewchurs:install
  3. Add your API key

    Use the key from your dashboard. It goes in .env, never in your code.

    .env
    FEWCHURS_API_KEY=fr_live_xxx

Show the board

That's already done: the package adds a ready-made page at /feedback. Open it and you'll see your board with Top and New tabs, voting, comments and a form for new requests.

To put the board inside one of your own pages, add the Blade tag anywhere:

<x-fewchurs::board />

It's rendered on your server, so voting and commenting work even with JavaScript turned off. If your app uses Livewire, there's a reactive version too:

<livewire:fewchurs-board />

Votes count the moment someone clicks, and save in the background. If the API can't be reached, the board shows a short message with a "Try again" button inside the board, and the rest of your page keeps working.

Add lazy to the Livewire board to show a loading shimmer until it's ready:

<livewire:fewchurs-board lazy />

As a sheet

Put the board behind a floating button instead of on the page. Add it once, for example to your main layout, and it shows on every page:

<x-fewchurs::sheet />                    {{-- slides in from the right --}}
<x-fewchurs::sheet side="left" />
<x-fewchurs::sheet side="bottom" />

Change the button text with label:

<x-fewchurs::sheet label="Suggest a feature" />

Or hide the floating button and open the sheet from any element of your own with data-fewchurs-open:

<x-fewchurs::sheet :trigger="false" />

<button data-fewchurs-open>Feedback</button>

The board loads only the first time the sheet opens, so pages where nobody opens it make no API calls. On phones it fills the screen, and without JavaScript the button is a link to /feedback.

The sheet shows /feedback in a frame, so it needs that route. If your app sends X-Frame-Options: DENY or a CSP frame-ancestors 'none', allow your own site to frame /feedback.

Use your own layout

To render /feedback inside your app's layout, with your header and footer, set these in config/fewchurs.php:

config/fewchurs.php
'board' => [
    'layout' => 'layouts.app',  // your layout view
    'section' => 'content',     // the @yield it renders into
],

The same file sets the URL prefix, which tabs show, how many requests per page, whether comments and following are open, whether the email field is hidden, optional or required, and whether people must be signed in to post.

Customize

Change the color and corner radius right on the tag:

<x-fewchurs::board :theme="['primary' => '#ED5F18', 'radius' => '12px']" />

Add your own heading above the board with a slot:

<x-fewchurs::board>
    <x-slot:header>
        <h1>Help shape {{ config('app.name') }}</h1>
    </x-slot:header>
</x-fewchurs::board>

To change the markup or the wording, publish the views and translations. They're small Blade and lang files, made to be edited:

php artisan vendor:publish --tag=fewchurs-views
php artisan vendor:publish --tag=fewchurs-lang

Build your own UI

Prefer your own design? Use the PHP client and render it however you like. Every call throws a typed exception on failure, with a userMessage() that's safe to show.

use Fewchurs\Laravel\Facades\Fewchurs;

$page = Fewchurs::features()->top(limit: 20);

$feature = Fewchurs::features()->submit(
    title: 'Add dark mode',
    description: 'Would love a dark theme.',
    email: auth()->user()?->email,
);

Fewchurs::features()->vote($feature->id);
Fewchurs::comments()->create($feature->id, text: '+1');

The package README covers everything else: visitor identity, more than one board, events, and Fewchurs::fake() for your tests.

Check your setup

One command tells you whether your key works and the board can be reached:

php artisan fewchurs:check

After a deploy, php artisan fewchurs:warm loads the board settings ahead of the first visitor.

What your plan changes

Your plan is applied on our servers, so you never need to change code or update the package when it changes. Changes show up within 5 minutes.

FreeStarterPro
Requests the board listsFirst 5First 200All
"Powered by Fewchurs" lineShownHiddenHidden

Newer requests are still saved and show in your dashboard. Once your app is past its limit, a new request is accepted but doesn't appear in the board's list. See pricing.

About the API key

Here the key stays on your server: the browser only ever talks to your own Laravel routes. The package keeps it out of the page and out of your logs. Still, keep it in .env and out of git.

Each visitor gets a random ID in a cookie (or their user ID when they're signed in), hashed with your APP_KEY before it's sent. That is how votes are remembered without an account. Read more in How it works.