Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Laravelclickuperrorreports Laravel Package

sbtsdev/laravelclickuperrorreports

Laravel package that automatically sends application error reports to ClickUp, creating tasks with exception details so your team can track and resolve issues without leaving their workflow.

View on GitHub
Deep Wiki
Context7

Getting Started

This assessment is based on the package metadata and the conventions of Laravel exception-reporter packages. Class names, env keys, and publish tags below are the shape of the integration — verify the exact spelling against the repo README and src/ before wiring it in, because this package has little public usage to cross-check against.

1. Install and pin

composer require sbtsdev/laravelclickuperrorreports

Because the package has 2 stars and 0 dependents, avoid floating constraints. Pin the exact tag in composer.json and commit composer.lock.

2. Confirm auto-discovery

Check composer.json in the vendor package for extra.laravel.providers. If it's absent, register manually:

  • Laravel 11+: bootstrap/providers.php
  • Laravel 10 and below: config/app.php providers array

3. Publish the config

php artisan vendor:publish --tag=clickup-config
# or: --provider="Sbtsdev\ClickUpErrorReports\ClickUpErrorReportsServiceProvider"

4. Set environment variables

CLICKUP_API_TOKEN=pk_xxxxxxxx
CLICKUP_LIST_ID=901234567890
CLICKUP_ERRORS_ENABLED=true

Then php artisan config:clear. The most common "it silently does nothing" cause with small packages is a config key that doesn't match what the README claims — open config/ and read the actual keys before trusting the docs.

5. Smoke test

php artisan tinker
>>> throw new RuntimeException('clickup smoke test');

or hit a throwaway route. You should get a task in the target ClickUp list within a few seconds.

First real use case: wire it into the global exception handler so unhandled exceptions in production become ClickUp tickets, gated to production only. That's the one thing this package buys you that a log file doesn't: an assignable, triageable inbox item.

Where to look first:

  1. README.md — env keys and publish tag
  2. config/clickup-error-reporting.php — toggles, queue settings, formatter class
  3. src/ — the reporter class and its HTTP client (it's likely small; read all of it)

Implementation Patterns

Global handler integration

Laravel 11+ (bootstrap/app.php):

->withExceptions(function (Exceptions $exceptions) {
    $exceptions->report(function (Throwable $e) {
        if (app()->isProduction()) {
            app(\Sbtsdev\ClickUpErrorReports\ClickUpReporter::class)->report($e);
        }
    });
})

Laravel 10 and below: the report() method of App\Exceptions\Handler.

If the package registers itself with Laravel's reporting pipeline, plain report($e) from anywhere will work — check src/ for a register() call before assuming that.

Manual reporting at boundaries

For expected-but-notable failures, report explicitly so you control the threshold:

try {
    $this->charge($order);
} catch (PaymentGatewayException $e) {
    app(ClickUpReporter::class)->report($e);
    throw $e; // still bubble it — don't swallow
}

Context enrichment

The bare exception is rarely enough to act on. Attach the identifiers your team actually searches by:

app(ClickUpReporter::class)->withContext([
    'user_id' => auth()->id(),
    'tenant'  => tenant('id'),
    'route'   => request()->route()?->getName(),
    'release' => config('app.version'),
])->report($e);

If the package doesn't expose withContext, its formatter/transformer class (usually configurable) is the extension point — subclass it rather than forking.

Always queue the HTTP call

An exception handler must not add latency or failure modes to a request that's already failing. Wrap the reporter in a job:

class ReportToClickUp implements ShouldQueue
{
    public int $tries = 3;
    public array $backoff = [10, 60, 300];
    public function __construct(private Throwable $e) {}
    public function handle(): void { /* app(ClickUpReporter::class)->report($this->e) */ }
}

Deduplicate aggressively

During an outage you'll generate one exception per request. Without a fingerprint guard you'll create thousands of identical tasks and get rate-limited:

$key = 'clickup:'.md5($e::class.$e->getFile().$e->getLine());
if (Cache::add($key, true, now()->addHour())) {
    ReportToClickUp::dispatch($e);
}

Route by severity

Map exception classes to different ClickUp list IDs in config: fatal/500s to an on-call list, recoverable warnings to a backlog list. This is the difference between a signal you read and a list you mute.

Don't treat it as an APM

ClickUp is a ticket inbox, not Sentry or Telescope. Use it for failures a human must own. Keep it in addition to your monitoring, not instead of it.

Gotchas and Tips

  • License is NOASSERTION. There's no SPDX identifier. Get legal sign-off before this touches production, or vendor the two or three classes you need. This is the single biggest blocker for a commercial codebase.
  • Verify the release tag resolves. The metadata shows a single release dated 2026-06-03, which is anomalous. Run composer show -a sbtsdev/laravelclickuperrorreports and confirm a tag actually exists before pinning to one.
  • Recursion is a real hazard. If the reporter throws inside the exception handler, Laravel logs a secondary exception and can loop. Wrap the report call in try/catch and swallow.
  • Redact by default. Stack traces, request bodies, cookies, and Authorization headers land in a tool your whole team — and possibly a client workspace — can read. Scrub before sending.
  • Gate on environment. Nothing in the package knows it's running in your test suite. Without APP_ENV guards, PHPUnit will file tickets.
  • Config cache. After any .env change: php artisan config:cache (or config:clear). Stale config is the top cause of "it was working yesterday."
  • Queue connection matters. If QUEUE_CONNECTION=sync in production, the reporter is a synchronous third-party HTTP call on every exception. Verify the driver.
  • ClickUp rate limits. 429s happen at volume; honor Retry-After and keep the job backoff generous. Cap the payload — describe stack traces in a fenced block and truncate around 30k characters.
  • Task explosion is the failure mode. This package degrades from "useful inbox" to "unreadable noise" quickly. Dedupe and severity routing aren't optional polish.
  • Read src/ before trusting README. At this maturity level, the code is the spec. It's a small package — half an hour of reading tells you exactly what it does and what it doesn't.
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
alphabalex/messaging-made-easy
rawphp/warp
shootkiran/merobug
narakode/fineauth
numencode/wn-syncops-plugin
ibnnajjaar/mib-global-pay
ably/pubsub-server
mstfkhazaal/defender
mfonte/base62x
karnoweb/metapilot
tobya/bcsapiwrapper
swalker2/cpanel
vish4395/laravel-translation-manager
morningtrain/economic
teksite/systeminfo-laravel
atomcms/voting
run6/weather
siokas/laravelembeddirectives
adamlien/pkuuids
gilsonsouza/lara-doc-generator