<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Abinash Bhatta</title>
    <description>The latest articles on DEV Community by Abinash Bhatta (@abinash889).</description>
    <link>https://dev.to/abinash889</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1385614%2F06cec104-6f58-426e-ac92-46401eebeaef.png</url>
      <title>DEV Community: Abinash Bhatta</title>
      <link>https://dev.to/abinash889</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/abinash889"/>
    <language>en</language>
    <item>
      <title>I got tired of debugging Laravel queues blind — so I built a free dashboard (no Redis needed)</title>
      <dc:creator>Abinash Bhatta</dc:creator>
      <pubDate>Wed, 18 Mar 2026 10:49:25 +0000</pubDate>
      <link>https://dev.to/abinash889/i-got-tired-of-debugging-laravel-queues-blind-so-i-built-a-free-dashboard-no-redis-needed-535c</link>
      <guid>https://dev.to/abinash889/i-got-tired-of-debugging-laravel-queues-blind-so-i-built-a-free-dashboard-no-redis-needed-535c</guid>
      <description>&lt;p&gt;I was working on a Laravel project for a client — standard stuff, database queue driver, shared hosting, nothing fancy.&lt;/p&gt;

&lt;p&gt;A payment job started failing silently.&lt;/p&gt;

&lt;p&gt;No alert. No dashboard. Just a frustrated client asking why invoices weren't being sent.&lt;/p&gt;

&lt;p&gt;I opened the &lt;code&gt;failed_jobs&lt;/code&gt; table and started reading raw JSON stack traces. Then I ran &lt;code&gt;php artisan queue:work&lt;/code&gt; with my eyes glued to the terminal. Then I wrote a quick throwaway script to query the jobs table.&lt;/p&gt;

&lt;p&gt;You know the feeling.&lt;/p&gt;

&lt;p&gt;The obvious fix is Laravel Horizon — it's a beautiful dashboard and I've used it many times. But Horizon requires Redis. This project was on shared hosting with no Redis. And honestly, for a small project, spinning up Redis just to get queue visibility felt like overkill.&lt;/p&gt;

&lt;p&gt;So I spent a few evenings building something lightweight.&lt;/p&gt;




&lt;h2&gt;
  
  
  What I built
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Lightweight Queue Inspector&lt;/strong&gt; — a debugging dashboard for Laravel apps using the database queue driver.&lt;/p&gt;

&lt;p&gt;No Redis. No Horizon. Just your existing &lt;code&gt;jobs&lt;/code&gt; and &lt;code&gt;failed_jobs&lt;/code&gt; tables.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F276lefa7svhgqq1doxxk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F276lefa7svhgqq1doxxk.png" alt="Dashboard screenshot" width="800" height="434"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here's what it gives you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Pending jobs&lt;/strong&gt; — see everything waiting in the queue, with collapsible payload inspection&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Failed jobs&lt;/strong&gt; — full exception messages, stack traces, retry or delete individually or in bulk&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Successful jobs&lt;/strong&gt; — execution time per job (colour coded green/orange/red) and memory usage&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dashboard stats&lt;/strong&gt; — pending count, failed count, avg execution time, top failing job&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Filters&lt;/strong&gt; — filter any page by queue name or job class&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security warnings&lt;/strong&gt; — terminal warnings if you forgot to add auth middleware, or if auth is set but no login route exists&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  How it works under the hood
&lt;/h2&gt;

&lt;p&gt;The package hooks into Laravel's built-in queue events — no extra config, no extra tables beyond one small metrics table:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Event&lt;/th&gt;
&lt;th&gt;What gets recorded&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;JobProcessing&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;job class, queue name, started_at&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;JobProcessed&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;execution_time_ms, memory_usage_mb, status = success&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;JobFailed&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;execution_time_ms, exception message, status = failed&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;These events fire automatically when &lt;code&gt;php artisan queue:work&lt;/code&gt; processes a job. You get full visibility into what's running, how long it takes, and what's failing — without touching a single line of your application code.&lt;/p&gt;




&lt;h2&gt;
  
  
  Install in 2 minutes
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;composer require abinashbhatta/lightweight-queue-inspector
php artisan migrate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Visit &lt;code&gt;/queue-inspector&lt;/code&gt;. Done.&lt;/p&gt;

&lt;p&gt;The package auto-discovers — no need to register anything in &lt;code&gt;config/app.php&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Always protect it in production:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="c1"&gt;// config/queue-inspector.php&lt;/span&gt;
&lt;span class="s1"&gt;'middleware'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'web'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'auth'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Who is this for?
&lt;/h2&gt;

&lt;p&gt;If you're using Horizon and Redis already — stick with Horizon, it's excellent.&lt;/p&gt;

&lt;p&gt;This is for the rest of us:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Small to medium projects on shared hosting&lt;/li&gt;
&lt;li&gt;Internal tools and admin panels&lt;/li&gt;
&lt;li&gt;Early-stage apps where Redis is overkill&lt;/li&gt;
&lt;li&gt;Anyone who just wants to see what their queues are doing right now&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  What's coming next
&lt;/h2&gt;

&lt;p&gt;I'm planning to add auto-refresh, email/Slack alerts on job failure, dark mode, and charts showing job trends over time. The full roadmap is on GitHub.&lt;/p&gt;

&lt;p&gt;GitHub: &lt;a href="https://github.com/abinash889/lightweight-queue-inspector" rel="noopener noreferrer"&gt;https://github.com/abinash889/lightweight-queue-inspector&lt;/a&gt;&lt;br&gt;
Packagist: &lt;a href="https://packagist.org/packages/abinashbhatta/lightweight-queue-inspector" rel="noopener noreferrer"&gt;https://packagist.org/packages/abinashbhatta/lightweight-queue-inspector&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;If you've ever been in that same situation — debugging queues blind at an inconvenient hour — I'd love to know what you think. What would make this more useful for your projects?&lt;/p&gt;

</description>
      <category>laravel</category>
      <category>php</category>
      <category>opensource</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
