<?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: Vigilmon</title>
    <description>The latest articles on DEV Community by Vigilmon (@vigilmon).</description>
    <link>https://dev.to/vigilmon</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3994004%2F5bbb781a-0339-47ba-a104-c3867a33ea60.png</url>
      <title>DEV Community: Vigilmon</title>
      <link>https://dev.to/vigilmon</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/vigilmon"/>
    <language>en</language>
    <item>
      <title>We Shipped 36 Features in 30 Days — Here's What We Built (and Learned)</title>
      <dc:creator>Vigilmon</dc:creator>
      <pubDate>Sat, 20 Jun 2026 13:46:58 +0000</pubDate>
      <link>https://dev.to/vigilmon/we-shipped-36-features-in-30-days-heres-what-we-built-and-learned-4pme</link>
      <guid>https://dev.to/vigilmon/we-shipped-36-features-in-30-days-heres-what-we-built-and-learned-4pme</guid>
      <description>&lt;p&gt;On May 18 we launched &lt;a href="https://vigilmon.online" rel="noopener noreferrer"&gt;Vigilmon&lt;/a&gt; — an uptime and website monitoring service for developers and indie makers who want to know when their sites go down before their users do. Since then, we've been heads-down building in public.&lt;/p&gt;

&lt;p&gt;Here's every feature we shipped in the first 30 days.&lt;/p&gt;

&lt;h2&gt;
  
  
  🔍 Core Monitoring
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Response time tracking&lt;/strong&gt; — Every check now records and displays response time so you can catch performance degradation before it becomes an outage.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Incident history log&lt;/strong&gt; — A full incident log with start/end timestamps and duration. See exactly when things broke and when they recovered.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. SSL certificate expiry alerts&lt;/strong&gt; — Vigilmon displays your cert's expiry date on the dashboard and status page and alerts you before it lapses. No more surprise cert failures.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Heartbeat / cron-job monitoring&lt;/strong&gt; — If your cron job doesn't ping us on schedule, we alert you. No more silent cron failures destroying your data pipeline at 3 AM.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. TCP/port monitoring&lt;/strong&gt; — Monitor raw TCP connectivity on any port, not just HTTP. Useful for databases, mail servers, Redis, game servers — anything that listens on a port.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. Response content checks&lt;/strong&gt; — Configure a keyword that must appear in the response body. Case-insensitive matching. If your "Checkout" button disappears from your homepage, you'll know immediately.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;7. Configurable check intervals&lt;/strong&gt; — Choose 1, 5, 15, 30, or 60 minute intervals per monitor depending on how critical the endpoint is. High-traffic APIs get 1-minute checks; staging environments get hourly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;8. 90-day uptime chart&lt;/strong&gt; — Public status pages now show a rolling 90-day uptime bar chart. Cached for performance, looks great on your status page.&lt;/p&gt;

&lt;h2&gt;
  
  
  🔔 Alerting
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;9. Slack (Block Kit format)&lt;/strong&gt; — Upgraded Slack notifications to Block Kit with color sidebars — red for down, green for recovery. Actionable context instead of raw JSON.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;10. Webhook notifications&lt;/strong&gt; — Send alert payloads to any HTTPS endpoint. Build your own integrations: PagerDuty, OpsGenie, your custom incident bot.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;11. Discord alerts&lt;/strong&gt; — A native Discord webhook channel. Alerts land directly in your &lt;code&gt;#ops&lt;/code&gt; channel.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;12. Telegram bot&lt;/strong&gt; — Telegram bot notifications. Send alerts to yourself or a group chat. Popular with our European users.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;13. Email alert improvements&lt;/strong&gt; — Alert subjects now include the monitor name and status. Each email links directly to the incident on your dashboard — one click to the context you need.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;14. Alert escalation rules&lt;/strong&gt; — If a monitor is still down after N minutes, escalate to a secondary contact. No more "was anyone notified?" post-mortems after an incident.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;15. Webhook delivery history&lt;/strong&gt; — Every webhook attempt is logged with status code, response body, and duration. You can debug a failed delivery without any guesswork.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;16. Maintenance windows&lt;/strong&gt; — Schedule planned downtime windows so alerts don't fire while you're deploying. No more 2 AM false alarms during your release.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;17. Monthly uptime report emails&lt;/strong&gt; — Automated monthly summary with uptime % per monitor. Forward to your manager or include in your SLA report.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;18. Welcome email&lt;/strong&gt; — New users get a proper onboarding email with their first steps instead of landing in an empty app.&lt;/p&gt;

&lt;h2&gt;
  
  
  🖥️ Dashboard UX
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;19. Dashboard redesign&lt;/strong&gt; — Summary stats (monitors up/down, incidents today), a monitor grid with at-a-glance status indicators, and a live incident feed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;20. Monitor tags&lt;/strong&gt; — Tag monitors by project, environment, or team (&lt;code&gt;production&lt;/code&gt;, &lt;code&gt;staging&lt;/code&gt;, &lt;code&gt;api&lt;/code&gt;, &lt;code&gt;frontend&lt;/code&gt;). Filter by tag on the dashboard. Scales when you have 50+ monitors.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;21. Improved onboarding&lt;/strong&gt; — First-time users now see a guided empty-state instead of a blank dashboard. We cut time-to-first-monitor by 60%.&lt;/p&gt;

&lt;h2&gt;
  
  
  🛠️ Developer Tools
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;22. Personal API tokens&lt;/strong&gt; — Generate API tokens (prefixed &lt;code&gt;vtk_&lt;/code&gt;) from account settings and manage monitors programmatically.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;23. REST API&lt;/strong&gt; — Full &lt;code&gt;/api/v1/monitors&lt;/code&gt; REST API — CRUD, status checks, incidents. Documented at &lt;a href="https://vigilmon.online/docs/api" rel="noopener noreferrer"&gt;vigilmon.online/docs/api&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;24. Custom HTTP request headers&lt;/strong&gt; — Specify request headers per monitor. Useful for bearer tokens, &lt;code&gt;X-Api-Key&lt;/code&gt; headers, or bypassing WAF rules on your staging environment.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;25. SVG status badges&lt;/strong&gt; — Embed a live status badge into your README or documentation. Updates in real-time. One line of Markdown.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;26. API documentation page&lt;/strong&gt; — A dedicated &lt;code&gt;/docs/api&lt;/code&gt; reference with endpoint tables, example requests, and token instructions.&lt;/p&gt;

&lt;h2&gt;
  
  
  📈 Marketing &amp;amp; SEO
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;27. Comparison pages&lt;/strong&gt; — &lt;code&gt;/compare/vigilmon-vs-pingdom&lt;/code&gt;, &lt;code&gt;/compare/vigilmon-vs-uptimerobot&lt;/code&gt;, and more. Targeting the "alternative to X" search queries.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;28. Technical SEO&lt;/strong&gt; — Sitemap, robots.txt, canonical tags, meta descriptions across all public pages, and structured data for rich snippets.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;29. Dev.to tutorial articles&lt;/strong&gt; — Published tutorials on monitoring Laravel, Node.js, and Next.js apps with Vigilmon. These drive organic discovery.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;30. Directory submissions&lt;/strong&gt; — Listed on BetaList, Product Hunt upcoming, and several developer tool directories.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we learned about prioritization
&lt;/h2&gt;

&lt;p&gt;After 30 days and 36+ shipped features, three lessons stick:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Monitoring features compound
&lt;/h3&gt;

&lt;p&gt;Each new check type (TCP, heartbeat, content checks) multiplies the number of things users can monitor. We should have shipped these earlier instead of polishing the dashboard first. The breadth of coverage is what makes a monitoring tool worth paying for.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Alerting IS the product
&lt;/h3&gt;

&lt;p&gt;Users don't open dashboards when things are fine. They care about: Was I notified? How fast? Was the notification actionable? Investing in webhook delivery history, escalation rules, and channel diversity had higher impact than we expected. The dashboard is a nice-to-have; the alert is the whole point.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Docs unlock API adoption
&lt;/h3&gt;

&lt;p&gt;We shipped the REST API and got zero integrations. We shipped the docs page and got three integrations in a week. Documentation is a feature, not a follow-up task.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Show HN launch&lt;/strong&gt; — We're preparing our Hacker News post. Watch this space or follow along on Dev.to.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stripe payments&lt;/strong&gt; — Paid plans are nearly ready. The free tier (3 monitors, 5-minute checks) will always exist.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Broken link detection&lt;/strong&gt; — Crawl your site, find dead links before Google does, get a digest report.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Status page customization&lt;/strong&gt; — Custom domain support and branding for your public status page.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try Vigilmon
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://vigilmon.online" rel="noopener noreferrer"&gt;vigilmon.online&lt;/a&gt; — free tier, no credit card required. Add your first monitor in under 60 seconds.&lt;/p&gt;

&lt;p&gt;If you're also building in public, drop a comment with your project — I'd love to follow along.&lt;/p&gt;

</description>
      <category>buildinpublic</category>
      <category>monitoring</category>
      <category>webdev</category>
      <category>indiehackers</category>
    </item>
    <item>
      <title>Monitor Your Laravel App with Vigilmon</title>
      <dc:creator>Vigilmon</dc:creator>
      <pubDate>Sat, 20 Jun 2026 11:29:52 +0000</pubDate>
      <link>https://dev.to/vigilmon/monitor-your-laravel-app-with-vigilmon-2flk</link>
      <guid>https://dev.to/vigilmon/monitor-your-laravel-app-with-vigilmon-2flk</guid>
      <description>&lt;p&gt;Your app is down. Your users can't reach it. You find out two hours later — not from a monitoring alert, but from an email that starts with "Hey, is your site broken?"&lt;/p&gt;

&lt;p&gt;Sound familiar? Uptime monitoring isn't optional for production apps — it's the difference between catching an outage in seconds and discovering it from a frustrated user. Whether you're running a solo side project or a startup, you need to know the moment something goes wrong.&lt;/p&gt;

&lt;p&gt;This tutorial walks you through setting up full uptime monitoring for a Laravel app using &lt;a href="https://vigilmon.online" rel="noopener noreferrer"&gt;Vigilmon&lt;/a&gt; — a monitoring tool we built, ironically, with Laravel itself.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Vigilmon Offers (Free Tier)
&lt;/h2&gt;

&lt;p&gt;Before we dive in, here's what you get on the free plan:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;HTTP/HTTPS uptime checks&lt;/strong&gt; — monitor any URL on intervals as short as 1 minute&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SSL certificate expiry monitoring&lt;/strong&gt; — get alerted before your cert expires and breaks HTTPS&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Heartbeat monitoring&lt;/strong&gt; — verify that your Laravel scheduler (or any cron job) is running on time&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Slack, Discord, and email alerts&lt;/strong&gt; — instant notifications when something goes down&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Public status pages&lt;/strong&gt; — share a live status URL with your users&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;REST API&lt;/strong&gt; — create and manage monitors programmatically&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No credit card required. Let's get started.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 1: Sign Up at vigilmon.online
&lt;/h2&gt;

&lt;p&gt;Head to &lt;a href="https://vigilmon.online" rel="noopener noreferrer"&gt;vigilmon.online&lt;/a&gt; and create a free account. The sign-up takes under a minute — just email and password, no billing details needed.&lt;/p&gt;

&lt;p&gt;Once you're in, you'll land on your dashboard. It's empty for now, but that won't last long.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 2: Add Your First HTTP Monitor
&lt;/h2&gt;

&lt;p&gt;Click &lt;strong&gt;"Add Monitor"&lt;/strong&gt; and select &lt;strong&gt;HTTP/HTTPS&lt;/strong&gt;. Fill in:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Name&lt;/strong&gt;: something descriptive, like &lt;code&gt;My App – Homepage&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;URL&lt;/strong&gt;: your app's URL, e.g. &lt;code&gt;https://myapp.com&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check interval&lt;/strong&gt;: every 1 or 5 minutes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Expected status code&lt;/strong&gt;: &lt;code&gt;200&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For Laravel apps with a health check endpoint, use that instead of the homepage — it's a lighter-weight check and more reliable:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;URL: https://myapp.com/health
Expected content: "ok"
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you don't have a &lt;code&gt;/health&lt;/code&gt; route yet, add one quickly in &lt;code&gt;routes/web.php&lt;/code&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="nc"&gt;Route&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'/health'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;response&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="s1"&gt;'status'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'ok'&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Vigilmon can assert on the response body too — so returning &lt;code&gt;{"status":"ok"}&lt;/code&gt; lets you configure an expected content match of &lt;code&gt;"ok"&lt;/code&gt;. If a deploy breaks your app and the health endpoint returns a 500 or an error page, you'll know within minutes.&lt;/p&gt;

&lt;p&gt;Hit &lt;strong&gt;Save&lt;/strong&gt;, and Vigilmon starts checking immediately. Your first monitor is live.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 3: Add a Heartbeat Monitor for Your Laravel Scheduler
&lt;/h2&gt;

&lt;p&gt;HTTP monitors tell you if your web server is responding. But they won't tell you if your Laravel scheduler has silently stopped running — which is exactly the kind of failure that slips through.&lt;/p&gt;

&lt;p&gt;Heartbeat monitoring solves this: Vigilmon gives you a unique URL to ping after each scheduler run. If it doesn't receive a ping within the expected window, it fires an alert.&lt;/p&gt;

&lt;p&gt;In your Vigilmon dashboard, click &lt;strong&gt;"Add Monitor"&lt;/strong&gt; → &lt;strong&gt;Heartbeat&lt;/strong&gt;. Configure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Name&lt;/strong&gt;: &lt;code&gt;Laravel Scheduler&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Expected interval&lt;/strong&gt;: every 1 minute (or whatever your scheduler runs at)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Grace period&lt;/strong&gt;: 2–3 minutes (time allowed before declaring it missed)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Vigilmon generates a heartbeat URL like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://vigilmon.online/heartbeat/abc123xyz
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now wire that into your Laravel scheduler. The cleanest approach is a dedicated Artisan command:&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="cp"&gt;&amp;lt;?php&lt;/span&gt;

&lt;span class="kn"&gt;namespace&lt;/span&gt; &lt;span class="nn"&gt;App\Console\Commands&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="nc"&gt;Illuminate\Console\Command&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="nc"&gt;Illuminate\Support\Facades\Http&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;PingVigilmonHeartbeat&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;Command&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;protected&lt;/span&gt; &lt;span class="nv"&gt;$signature&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'vigilmon:heartbeat'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;protected&lt;/span&gt; &lt;span class="nv"&gt;$description&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'Ping Vigilmon heartbeat to confirm scheduler is running'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;handle&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nc"&gt;Http&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;config&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'services.vigilmon.heartbeat_url'&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add the URL to your &lt;code&gt;config/services.php&lt;/code&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="s1"&gt;'vigilmon'&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;'heartbeat_url'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;env&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'VIGILMON_HEARTBEAT_URL'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="p"&gt;],&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And in your &lt;code&gt;.env&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight conf"&gt;&lt;code&gt;&lt;span class="n"&gt;VIGILMON_HEARTBEAT_URL&lt;/span&gt;=&lt;span class="n"&gt;https&lt;/span&gt;://&lt;span class="n"&gt;vigilmon&lt;/span&gt;.&lt;span class="n"&gt;online&lt;/span&gt;/&lt;span class="n"&gt;heartbeat&lt;/span&gt;/&lt;span class="n"&gt;abc123xyz&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Finally, register it in &lt;code&gt;routes/console.php&lt;/code&gt; (Laravel 11+) to run every minute, after your other scheduled jobs:&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="kn"&gt;use&lt;/span&gt; &lt;span class="nc"&gt;Illuminate\Support\Facades\Schedule&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nc"&gt;Schedule&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;command&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'vigilmon:heartbeat'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;everyMinute&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or in &lt;code&gt;app/Console/Kernel.php&lt;/code&gt; for older Laravel versions:&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="k"&gt;protected&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;schedule&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;Schedule&lt;/span&gt; &lt;span class="nv"&gt;$schedule&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// ... your other scheduled tasks ...&lt;/span&gt;
    &lt;span class="nv"&gt;$schedule&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;command&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'vigilmon:heartbeat'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;everyMinute&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now every time &lt;code&gt;php artisan schedule:run&lt;/code&gt; fires and completes, Vigilmon gets a ping. If your scheduler stops — because of a server issue, a misconfigured cron job, or a deploy that never restarted the container — Vigilmon will notice within 2–3 minutes and alert you.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 4: Set Up Slack and Email Notifications
&lt;/h2&gt;

&lt;p&gt;In your Vigilmon dashboard, go to &lt;strong&gt;Settings → Notifications&lt;/strong&gt;. You can configure:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Email alerts&lt;/strong&gt;: your email is already set from sign-up. You'll get a message the moment a monitor goes down and another when it recovers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Slack&lt;/strong&gt;: paste your Slack webhook URL. Vigilmon posts to your chosen channel immediately on state change.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Discord&lt;/strong&gt;: same flow — paste your Discord webhook URL under the Discord integration.&lt;/p&gt;

&lt;p&gt;You can attach notification channels per-monitor, so you can route your scheduler heartbeat to &lt;code&gt;#ops&lt;/code&gt; and your public homepage monitor to &lt;code&gt;#alerts&lt;/code&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 5: Share Your Status Page with Users
&lt;/h2&gt;

&lt;p&gt;Every Vigilmon account gets a public status page. Go to &lt;strong&gt;Status Page&lt;/strong&gt; in the dashboard, choose which monitors to display publicly, and enable it.&lt;/p&gt;

&lt;p&gt;You'll get a URL like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://status.vigilmon.online/yourapp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Share this with your users — add a link in your app footer, your support docs, or your README. When your app is down, users can check the status page themselves instead of flooding your inbox with "is it down?" emails.&lt;/p&gt;




&lt;h2&gt;
  
  
  Bonus: Create Monitors via the REST API
&lt;/h2&gt;

&lt;p&gt;If you want to automate monitor creation as part of your deploy pipeline, Vigilmon has a REST API. Here's how to create an HTTP monitor with curl:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://vigilmon.online/api/v1/monitors &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer YOUR_API_TOKEN"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "name": "My App – API",
    "type": "http",
    "url": "https://myapp.com/api/health",
    "interval": 60,
    "expectedStatusCode": 200,
    "expectedContent": "ok"
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your API token lives under &lt;strong&gt;Settings → API&lt;/strong&gt;. This is handy for staging environments — create a monitor when a preview deploy spins up, delete it when the PR is merged.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why We Built Vigilmon
&lt;/h2&gt;

&lt;p&gt;We built Vigilmon because we kept running into the same problem with our own Laravel projects: monitoring was either expensive (services charging $30+/month for basic uptime checks) or painful to set up (self-hosted solutions that need their own infrastructure to keep running).&lt;/p&gt;

&lt;p&gt;Since we were already deep in the Laravel ecosystem, we built what we actually wanted — something simple, fast to set up, with a free tier that's genuinely useful for real projects. Vigilmon itself runs on Laravel and MySQL, deployed on a bare Linux VPS. We monitor it with itself.&lt;/p&gt;

&lt;p&gt;If you build things with Laravel, we built this for you. &lt;strong&gt;&lt;a href="https://vigilmon.online" rel="noopener noreferrer"&gt;Sign up free at vigilmon.online&lt;/a&gt;&lt;/strong&gt; — no credit card, no 14-day trial cliff. Just monitoring that works.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Have questions or feedback? Drop us a note at &lt;a href="mailto:hello@vigilmon.online"&gt;hello@vigilmon.online&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>laravel</category>
      <category>php</category>
      <category>monitoring</category>
      <category>devops</category>
    </item>
  </channel>
</rss>
