Laravel SMS Catcher: Local SMS Notification Dashboard | Mohamed Said        [  ![Mohamed Said](https://cdn.msaied.com/01KT78WE565VEMM3PSNQAAB0MH.png)   Mohamed Said Laravel Backend Engineer  ](https://msaied.com) [ Home ](https://msaied.com) [ Projects ](https://msaied.com/projects) [ Articles  ](https://msaied.com/articles) [ Certificates ](https://msaied.com/certificates) [ Contact ](https://msaied.com#contact-section) 

       [  ](https://github.com/EG-Mohamed)       

 [ Home ](https://msaied.com) [ Projects ](https://msaied.com/projects) [ Articles ](https://msaied.com/articles) [ Certificates ](https://msaied.com/certificates) [ Contact ](https://msaied.com#contact-section) 

  [ home ](https://msaied.com)    [ articles ](https://msaied.com/articles)    Laravel SMS Catcher: A Local Dashboard for SMS Notifications        On this page       1. [  What Is Laravel SMS Catcher? ](#what-is-laravel-sms-catcher)
2. [  Installation ](#installation)
3. [  How It Works ](#how-it-works)
4. [  Dashboard Features ](#dashboard-features)
5. [  Phone-Style Previews ](#phone-style-previews)
6. [  Light and Dark Themes ](#light-and-dark-themes)
7. [  Inbox Management ](#inbox-management)
8. [  Environment Safety ](#environment-safety)
9. [  Configuration ](#configuration)
10. [  Key Takeaways ](#key-takeaways)

  ![Laravel SMS Catcher: A Local Dashboard for SMS Notifications](https://cdn.msaied.com/452/6cf05170f76a3b6c340dda18ee3bbc62.png)

 [  Laravel ](https://msaied.com/articles?category=laravel) [  Composer Pacakge ](https://msaied.com/articles?category=composer-pacakge)  #Laravel   #SMS   #Local Development   #Notifications   #Composer Package  

 Laravel SMS Catcher: A Local Dashboard for SMS Notifications 
==============================================================

     20 Jul 2026      3 min read    ![Mohamed Said](https://cdn.msaied.com/01KT78WE565VEMM3PSNQAAB0MJ.jpg)  Mohamed Said  

       Table of contents

  10 sections  

1. [  01   What Is Laravel SMS Catcher?  ](#what-is-laravel-sms-catcher)
2. [  02   Installation  ](#installation)
3. [  03   How It Works  ](#how-it-works)
4. [  04   Dashboard Features  ](#dashboard-features)
5. [  05   Phone-Style Previews  ](#phone-style-previews)
6. [  06   Light and Dark Themes  ](#light-and-dark-themes)
7. [  07   Inbox Management  ](#inbox-management)
8. [  08   Environment Safety  ](#environment-safety)
9. [  09   Configuration  ](#configuration)
10. [  10   Key Takeaways  ](#key-takeaways)

       What Is Laravel SMS Catcher?
----------------------------

Laravel SMS Catcher is a local development helper by [Michal Skogemann](https://github.com/michal78) that captures outgoing SMS notifications before they reach a real carrier. Think of it as the SMS equivalent of Mailpit: instead of sending texts to actual phone numbers during development, the package intercepts them and displays the content in a clean visual dashboard.

Installation
------------

Install the package as a development dependency via Composer:

```bash
composer require --dev michal78/laravel-sms-catcher

```

Once installed, the dashboard is immediately available at `/sms-catcher` whenever your app runs in the `local` environment or has debug mode enabled. No migrations, no extra services.

How It Works
------------

The package hooks into Laravel's notification system. When you dispatch a notification through the `sms` channel, SMS Catcher intercepts it by calling `toSms()` on your notification class. It then writes the sender, recipient, body, and timestamp to `storage/logs/sms-catcher.json`.

Using a flat JSON file has two practical benefits:

- **No database setup** — there are no tables or migrations to manage.
- **Git-friendly** — Laravel excludes `storage/logs` from version control by default, so test messages never end up in your repository.

For the package to capture a notification, your notification class must implement a `toSms()` method that returns a string, array, or an object containing the message body.

Dashboard Features
------------------

### Phone-Style Previews

Clicking a message in the sidebar opens a detail view with a phone-style mockup. A device selector dropdown lets you switch between screen widths to check how text wrapping, spacing, and line breaks render on different devices — useful for catching truncation issues before going to production.

### Light and Dark Themes

The dashboard ships with both light and dark themes, so it fits comfortably alongside whatever IDE or terminal setup you prefer.

### Inbox Management

You can clear individual messages or wipe the entire inbox directly from the dashboard, keeping your local log tidy during active development.

### Environment Safety

The dashboard is blocked on production environments by default. It only activates when the app is running in `local` mode or has debug mode turned on, reducing the risk of accidentally exposing it.

Configuration
-------------

If the defaults don't suit your project, publish the configuration file:

```bash
php artisan vendor:publish --tag=sms-catcher-config

```

The resulting `config/sms-catcher.php` file exposes the following options:

- **`SMS_CATCHER_ENABLED`** — toggle the catcher via an environment variable.
- **`route.prefix`** — set a custom URL path for the dashboard.
- **`route.middleware`** — wrap the dashboard routes with your own middleware.
- **`storage_path`** — change where the JSON message file is written.

Key Takeaways
-------------

- Drop-in SMS interception for local Laravel development, similar to how Mailpit handles email.
- Stores messages in a flat JSON file — no migrations or database tables needed.
- Phone-style mockup with a device selector helps you verify message formatting across screen sizes.
- Production-safe by default; only active in `local` environment or debug mode.
- Fully configurable URL prefix, middleware, and storage path via a published config file.

You can inspect the source code, report issues, and read the full documentation on the [GitHub repository](https://github.com/michal78/laravel-sms-catcher).

---

*Source: [Laravel News — Laravel SMS Catcher: A Local Dashboard for SMS Notifications](https://laravel-news.com/laravel-sms-catcher-a-local-dashboard-for-sms-notifications)*

 Found this useful?

          [  ](https://twitter.com/intent/tweet?url=https%3A%2F%2Fmsaied.com%2Farticles%2Flaravel-sms-catcher-a-local-dashboard-for-sms-notifications&text=Laravel+SMS+Catcher%3A+A+Local+Dashboard+for+SMS+Notifications) [  ](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fmsaied.com%2Farticles%2Flaravel-sms-catcher-a-local-dashboard-for-sms-notifications) 

 Frequently Asked Questions 
----------------------------

  3 questions  

     Q01  Does Laravel SMS Catcher require a database or migrations?        No. The package stores all captured messages in a flat JSON file located at `storage/logs/sms-catcher.json`, so there are no database tables or migrations to set up. 

      Q02  Will the SMS Catcher dashboard be accessible in production?        No. By default the dashboard is blocked on production environments and only activates when the application runs in `local` mode or has debug mode enabled. You can also toggle it explicitly via the `SMS_CATCHER_ENABLED` environment variable. 

      Q03  What does my notification class need to implement for SMS Catcher to work?        Your notification class must have a `toSms()` method that returns a string, array, or an object containing the message body. The package calls this method to intercept the outgoing SMS. 

  Continue reading

 More Articles 
---------------

 [ View all    ](https://msaied.com/articles) 

 [ ![Modular Monolith in Laravel: Enforcing Bounded Contexts Without a Microservices Tax](https://cdn.msaied.com/451/014ea4597c12e3ba1ce7a4f4a33d299e.png) laravel architecture ddd 

### Modular Monolith in Laravel: Enforcing Bounded Contexts Without a Microservices Tax

Learn how to carve a Laravel application into cohesive bounded contexts using modules, internal contracts, and...

  ![Mohamed Said](https://cdn.msaied.com/01KT78WE565VEMM3PSNQAAB0MJ.jpg)  Mohamed Said 

 21 Jul 2026     3 min read  

  Read    

 ](https://msaied.com/articles/modular-monolith-in-laravel-enforcing-bounded-contexts-without-a-microservices-tax-3) [ ![DDD Value Objects and DTOs in Laravel Without the Bloat](https://cdn.msaied.com/450/41688537085b86f102fd8c219a35319f.png) laravel ddd php 

### DDD Value Objects and DTOs in Laravel Without the Bloat

Learn how to implement domain-driven value objects and data transfer objects in Laravel using PHP 8.3 readonly...

  ![Mohamed Said](https://cdn.msaied.com/01KT78WE565VEMM3PSNQAAB0MJ.jpg)  Mohamed Said 

 21 Jul 2026     1 min read  

  Read    

 ](https://msaied.com/articles/ddd-value-objects-and-dtos-in-laravel-without-the-bloat) [ ![Laravel + Python FastAPI: Image OCR Demo](https://cdn.msaied.com/447/5f3d87146fbf19957973cbc88c6c0155.png) Laravel Python FastAPI 

### Laravel + Python FastAPI: Image OCR Demo

Learn how to call a Python image OCR script from Laravel using FastAPI as the bridge. This premium tutorial wa...

  ![Mohamed Said](https://cdn.msaied.com/01KT78WE565VEMM3PSNQAAB0MJ.jpg)  Mohamed Said 

 20 Jul 2026     3 min read  

  Read    

 ](https://msaied.com/articles/laravel-python-fastapi-image-ocr-demo) 

   [  ![Mohamed Said](https://cdn.msaied.com/01KT78WE565VEMM3PSNQAAB0MH.png)   Mohamed Said Laravel Backend Engineer  ](https://msaied.com)Senior Backend Engineer specializing in Laravel, scalable SaaS platforms, APIs, and cloud infrastructure. I build secure, high-performance web applications that help businesses grow.

Explore

- [Home](https://msaied.com)
- [Projects](https://msaied.com/projects)
- [Articles](https://msaied.com/articles)
- [Certificates](https://msaied.com/certificates)
- [Contact](https://msaied.com#contact-section)

Connect

- [   hello@msaied.com ](mailto:hello@msaied.com)
- [   +20 109 461 9204 ](tel:+201094619204)

© 2026 Mohamed Said. All rights reserved.

 [  ](https://github.com/EG-Mohamed) [  ](https://www.linkedin.com/in/msaiedm/) [  ](https://wa.me/201094619204) [  ](mailto:hello@msaied.com) [  ](https://drive.google.com/file/u/0/d/1MF20IPRJyzfy32mhEutjL5EpSls0w2Q8/view)
