repos
/ status-rust master

status-rust

mirror archived upstream

Single-binary self-hosted uptime monitoring and status pages on Rust axum: HTTP probes, Lighthouse audits, SEO crawler, and PDF reports.

axumdockerrustself-hostedsqlitestatus-pageuptime-monitoringvite

5.0 KB · 118 lines · HTML Raw History
  1{% extends "base.html" %}
  2
  3{% block extra_css %}
  4<link rel="stylesheet" href="{{ vite_asset('static_src/pages/index.js', 'css') }}">
  5{% endblock %}
  6
  7{% block breadcrumb_wrapper %}{% endblock %}
  8
  9{% block main %}
 10<section class="hero">
 11  <div class="container">
 12    <div class="row">
 13      <div class="col-12 col-lg-7">
 14        <span class="hero-eyebrow">
 15          <span class="eyebrow-dot" aria-hidden="true"></span>
 16          v0.1.0 · alpha · self-hosted
 17        </span>
 18        <h1 class="hero-title">
 19          Website status monitoring for operators who host their <span class="accent">own stack</span>.
 20        </h1>
 21        <p class="hero-sub">
 22          HTTP checks every three minutes. Lighthouse audits. Security header analysis.
 23          Full-site SEO crawl. Discord + email alerts on state transitions. Your data
 24          never leaves your infrastructure.
 25        </p>
 26        <div class="hero-ctas">
 27          <a href="{{ url_for('login') }}" class="btn btn-primary">Access dashboard →</a>
 28          <a href="https://github.com/overshard/status-rust" target="_blank" class="btn btn-outline-light">View source</a>
 29        </div>
 30      </div>
 31      <div class="col-12 col-lg-5 mt-5 mt-lg-0 d-flex align-items-center">
 32        <div class="terminal-block w-100">
 33          <span class="t-line"><span class="t-comment"># probe cycle</span></span>
 34          <span class="t-line"><span class="t-prompt">probe$</span><span class="t-out">GET https://bythewood.me</span></span>
 35          <span class="t-line"><span class="t-key">status</span>=<span class="t-val">200 OK</span> <span class="t-key">rtt</span>=<span class="t-val">142ms</span></span>
 36          <span class="t-line"><span class="t-key">cert</span>=<span class="t-val">valid · 87d</span></span>
 37          <span class="t-line"><span class="t-prompt">probe$</span> <span class="t-cursor"></span></span>
 38        </div>
 39      </div>
 40    </div>
 41  </div>
 42</section>
 43
 44<section class="stat-strip">
 45  <div class="container">
 46    <div class="row g-4">
 47      <div class="col-6 col-md-4">
 48        <div class="stat">
 49          <div class="stat-label">properties</div>
 50          <div class="stat-value">{{ total_properties|intcomma }}</div>
 51        </div>
 52      </div>
 53      <div class="col-6 col-md-4">
 54        <div class="stat">
 55          <div class="stat-label">checks logged</div>
 56          <div class="stat-value">{{ total_statuses|intcomma }}</div>
 57        </div>
 58      </div>
 59      <div class="col-12 col-md-4">
 60        <div class="stat">
 61          <div class="stat-label">online since</div>
 62          <div class="stat-value" style="font-size: 1.05rem;">
 63            {% if first_status_created_at %}{{ first_status_created_at }}{% else %}—{% endif %}
 64          </div>
 65        </div>
 66      </div>
 67    </div>
 68  </div>
 69</section>
 70
 71<section class="container my-5 py-4">
 72  <div class="row g-4">
 73    <div class="col-12 col-md-6 col-lg-4">
 74      <div class="feature">
 75        <div class="feature-label">uptime</div>
 76        <div class="feature-title">Live HTTP probes</div>
 77        <p class="feature-desc">Three-minute checks with two-strike debouncing. Email and Discord fire only on real state transitions, never on flaps.</p>
 78      </div>
 79    </div>
 80    <div class="col-12 col-md-6 col-lg-4">
 81      <div class="feature">
 82        <div class="feature-label">performance</div>
 83        <div class="feature-title">Lighthouse audits</div>
 84        <p class="feature-desc">Daily headless runs scoring performance, accessibility, best practices, and SEO. Top weighted metrics and savings opportunities ranked by impact.</p>
 85      </div>
 86    </div>
 87    <div class="col-12 col-md-6 col-lg-4">
 88      <div class="feature">
 89        <div class="feature-label">security</div>
 90        <div class="feature-title">Header analysis</div>
 91        <p class="feature-desc">HTTPS, HSTS, HSTS preload, content-sniffing protection, clickjack defence, and server-version leak checks on every probe.</p>
 92      </div>
 93    </div>
 94    <div class="col-12 col-md-6 col-lg-4">
 95      <div class="feature">
 96        <div class="feature-label">crawler</div>
 97        <div class="feature-title">Weekly SEO spider</div>
 98        <p class="feature-desc">In-process spider runs weekly. 38 ranked checks across SEO, links, sitemap, accessibility, content, performance, and security.</p>
 99      </div>
100    </div>
101    <div class="col-12 col-md-6 col-lg-4">
102      <div class="feature">
103        <div class="feature-label">sharing</div>
104        <div class="feature-title">Public status pages</div>
105        <p class="feature-desc">Flip a property public and share the URL. Customers see live status, response graphs, and uptime at a glance, no account required.</p>
106      </div>
107    </div>
108    <div class="col-12 col-md-6 col-lg-4">
109      <div class="feature">
110        <div class="feature-label">ownership</div>
111        <div class="feature-title">Single binary, single container</div>
112        <p class="feature-desc">Rust + axum + SQLite, shipped as one Docker Compose stack. Your data, your ingress, your retention policy. No SaaS lock-in.</p>
113      </div>
114    </div>
115  </div>
116</section>
117{% endblock %}