> ## Documentation Index
> Fetch the complete documentation index at: https://docs.commentify.pro/llms.txt
> Use this file to discover all available pages before exploring further.

# Troubleshooting

> 401s on writes, unstyled threads, React Refresh preamble, stale Vite pre-bundles, and config overlay surprises.

## Writes return 401, reads work

The API guard does not match the middleware group. The `web` guard needs a session; Laravel's `api` group never starts one.

| App                                    | `api.guard` | `api.middleware` |
| -------------------------------------- | ----------- | ---------------- |
| Same-origin Blade / Livewire / Inertia | `web`       | `['web']`        |
| Cross-origin SPA / tokens              | `sanctum`   | `['api']`        |

See [Authentication](/authentication). For Sanctum SPAs, also hit `/sanctum/csrf-cookie` and allow credentials in CORS.

## Thread has no CSS

Tailwind purged the SDK classes. Add:

```css theme={null}
@source '../js/vendor/commentify';
```

The installer tries to insert this in `resources/css/app.css`. Rebuild the frontend.

## `@vitejs/plugin-react can't detect preamble`

Add `@viteReactRefresh` **above** `@vite(...)` in the Blade layout. Exclude the published SDK from the React plugin:

```js theme={null}
react({ exclude: [/resources\/js\/vendor\/commentify/] })
```

The error often points at a vendor file, not the missing directive.

## Browser runs old SDK after `vendor:publish`

You probably added `@commentify/*` to `optimizeDeps.include`. Remove it, delete `node_modules/.vite`, restart Vite. See [JavaScript](/javascript).

## `core` config changes do nothing

`config/commentify.php` still exists, so Pro skips the overlay. Merge into `commentify-pro.core` and delete the extra file. The installer warns on this.

## `Unknown commentable type`

The `{type}` segment is not in `commentables` and is not a `morphMap` alias. Use `articles`, not `App\Models\Article`.

## Comments save locally but never appear

`require_approval` or a spam **review** left `is_approved = false`. Check Filament **Moderation Queue** and **Spam Log**. The author still sees their own pending comment when logged in.

## `spam_rejected` on every guest post with a link

`guests.stricter_spam` holds (review) or combined rules deny. That is intentional. Raise `max_links`, turn off stricter guest rules, or whitelist the flow with `require_approval` instead of deny.

## Akismet / toxicity never fires

Missing `AKISMET_KEY` or `COMMENTIFY_PERSPECTIVE_KEY` makes those checkers **allow**. Confirm they are listed in `spam.checkers` and the env is loaded.

## Filament Pro pages missing

Register `CommentifyProPlugin` **and** the free `CommentifyPlugin`. Pro does not auto-register from a config flag. The installer only prints a snippet.

## Pins 403

You are not a moderator. Implement `isCommentifyModerator()` or add the user id to `badges.moderator_ids`. Pins also 404 when `badges.pins` is false. Replies cannot be pinned.

## Import command: enable guest commenting

Importers refuse to run unless `allow_guests` is true. Imported authors are stored as guests.

## Media 404

`COMMENTIFY_MEDIA_ENABLED` is false (default). Enable it and rebuild so `GET ui` flips `features.media`.

## Realtime does nothing

`COMMENTIFY_REALTIME` is false, Echo is not on `window`, or the comment is still pending (pending does not broadcast). Channel name is `commentify.{alias}.{id}`.

## Still stuck

Email [hello@usamamuneer.me](mailto:hello@usamamuneer.me). Reproduce on [commentify.pro/playground](https://commentify.pro/playground) when you can — that app runs the same packages.
