<?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: Bartlomiej Komendarczuk</title>
    <description>The latest articles on DEV Community by Bartlomiej Komendarczuk (@belluu).</description>
    <link>https://dev.to/belluu</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%2F4026332%2Ff2f98d59-ab19-463a-9fd6-c3e7e6982dc3.jpg</url>
      <title>DEV Community: Bartlomiej Komendarczuk</title>
      <link>https://dev.to/belluu</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/belluu"/>
    <language>en</language>
    <item>
      <title>I built a self-hosted status page and monitoring tool</title>
      <dc:creator>Bartlomiej Komendarczuk</dc:creator>
      <pubDate>Sun, 12 Jul 2026 18:40:50 +0000</pubDate>
      <link>https://dev.to/belluu/i-built-a-self-hosted-status-page-and-monitoring-tool-47i0</link>
      <guid>https://dev.to/belluu/i-built-a-self-hosted-status-page-and-monitoring-tool-47i0</guid>
      <description>&lt;p&gt;Hi everyone,&lt;/p&gt;

&lt;p&gt;I’ve been working on an open-source project called &lt;strong&gt;BetterStatusPage&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The idea is to provide a practical, self-hosted monitoring and status page platform for small teams, homelabs and personal infrastructure — without requiring PostgreSQL, Redis, Kubernetes or a monthly SaaS subscription.&lt;/p&gt;

&lt;p&gt;It currently runs as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a single Node.js 22 process,&lt;/li&gt;
&lt;li&gt;with SQLite persistence,&lt;/li&gt;
&lt;li&gt;deployable through Docker Compose,&lt;/li&gt;
&lt;li&gt;with built-in backups and offline restore.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The project is currently in the &lt;strong&gt;MVP stage&lt;/strong&gt;, but the main functionality is already implemented.&lt;/p&gt;

&lt;h3&gt;
  
  
  Monitoring
&lt;/h3&gt;

&lt;p&gt;BetterStatusPage currently supports:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;HTTP/HTTPS checks, including status codes, response times and response body keywords,&lt;/li&gt;
&lt;li&gt;Basic Auth, OAuth2 and CAS authentication flows,&lt;/li&gt;
&lt;li&gt;ICMP ping and TCP port checks,&lt;/li&gt;
&lt;li&gt;DNS monitoring for A, AAAA, MX, CNAME and TXT records,&lt;/li&gt;
&lt;li&gt;SQL Server test queries,&lt;/li&gt;
&lt;li&gt;passive webhook monitoring for cron jobs and external services.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Notifications
&lt;/h3&gt;

&lt;p&gt;Alerts and recovery notifications can be sent through:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;email,&lt;/li&gt;
&lt;li&gt;generic webhooks,&lt;/li&gt;
&lt;li&gt;Discord,&lt;/li&gt;
&lt;li&gt;Slack,&lt;/li&gt;
&lt;li&gt;Microsoft Teams.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Failed notification deliveries are retried automatically and can later be inspected or retried manually from the admin panel.&lt;/p&gt;

&lt;h3&gt;
  
  
  Status page and incident management
&lt;/h3&gt;

&lt;p&gt;The public status page is built using a drag-and-drop grid editor. You can add monitor cards, service groups, Markdown blocks and an incident feed without writing custom CSS.&lt;/p&gt;

&lt;p&gt;The application also supports:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;incidents with severity levels and affected monitors,&lt;/li&gt;
&lt;li&gt;incident updates,&lt;/li&gt;
&lt;li&gt;scheduled maintenance windows,&lt;/li&gt;
&lt;li&gt;suppression of alerts during maintenance,&lt;/li&gt;
&lt;li&gt;monitor dependencies to reduce duplicate alerts,&lt;/li&gt;
&lt;li&gt;real-time updates through Server-Sent Events,&lt;/li&gt;
&lt;li&gt;uptime history,&lt;/li&gt;
&lt;li&gt;custom branding and dark mode,&lt;/li&gt;
&lt;li&gt;multiple languages,&lt;/li&gt;
&lt;li&gt;user roles,&lt;/li&gt;
&lt;li&gt;an audit log with field-level changes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There is also an encrypted AES-256-GCM secrets vault, so credentials and tokens do not need to be stored directly in monitor configurations.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why I built it
&lt;/h3&gt;

&lt;p&gt;I wanted something more capable than a simple uptime checker, but still easy to deploy and maintain.&lt;/p&gt;

&lt;p&gt;For many small environments, requiring a separate database server, cache, queue and several containers creates more operational work than the status page itself should require.&lt;/p&gt;

&lt;p&gt;With BetterStatusPage, the intended deployment experience is essentially:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker compose up &lt;span class="nt"&gt;-d&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The entire application is served through one process and one port.&lt;/p&gt;

&lt;h3&gt;
  
  
  Looking for feedback and testers
&lt;/h3&gt;

&lt;p&gt;I’m currently looking for people willing to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;try deploying it,&lt;/li&gt;
&lt;li&gt;test it in a homelab or small production environment,&lt;/li&gt;
&lt;li&gt;report bugs,&lt;/li&gt;
&lt;li&gt;review the security and deployment approach,&lt;/li&gt;
&lt;li&gt;suggest missing monitor types or integrations.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I’m especially interested in feedback about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;installation and upgrade experience,&lt;/li&gt;
&lt;li&gt;UI and configuration usability,&lt;/li&gt;
&lt;li&gt;notification reliability,&lt;/li&gt;
&lt;li&gt;features required before you would consider using it seriously.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;GitHub:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/BElluu/BetterStatusPage" rel="noopener noreferrer"&gt;https://github.com/BElluu/BetterStatusPage&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The project is licensed under MIT.&lt;/p&gt;

&lt;p&gt;Any feedback, issue reports, stars or contributions would be greatly appreciated.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>monitoring</category>
      <category>statuspage</category>
    </item>
  </channel>
</rss>
