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

6.1 KB · 133 lines · HTML Raw History
  1<!doctype html>
  2<html lang="en">
  3<head>
  4  <meta charset="utf-8">
  5  <meta name="viewport" content="width=device-width, initial-scale=1">
  6  <title>{% block title %}{{ title }}{% endblock %} · Status</title>
  7  <meta name="description" content="{% block description %}{{ description }}{% endblock %}">
  8  {% if BASE_URL %}<base href="{{ BASE_URL }}">{% endif %}
  9  <link rel="icon" type="image/svg+xml" href="{{ url_for('favicon') }}">
 10  {% block extra_head %}{% endblock %}
 11  <link rel="stylesheet" href="{{ vite_asset('static_src/base/index.js', 'css') }}">
 12  {% block extra_css %}{% endblock %}
 13</head>
 14<body>
 15  {% include 'includes/messages.html' %}
 16
 17  {% block nav %}
 18  <nav class="navbar navbar-dark navbar-expand-md d-print-none">
 19    <div class="container">
 20      <a class="navbar-brand" href="/">
 21        <span class="logo" aria-hidden="true">
 22          <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64">
 23            <polyline points="2,34 18,34 24,28 30,14 36,52 42,20 48,34 62,34"
 24              fill="none" stroke="#6b9e78" stroke-width="6"
 25              stroke-linejoin="round" stroke-linecap="round"/>
 26            <circle cx="30" cy="14" r="3.5" fill="#c9a84c"/>
 27          </svg>
 28        </span>
 29        <span class="brand-text">Status</span>
 30        <span class="brand-dot" aria-hidden="true"></span>
 31      </a>
 32      <button class="navbar-toggler border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navMain" aria-controls="navMain" aria-expanded="false" aria-label="Toggle navigation">
 33        <span class="navbar-toggler-icon"></span>
 34      </button>
 35      <div class="collapse navbar-collapse" id="navMain">
 36        <ul class="navbar-nav ms-3">
 37          {% if user.is_authenticated %}
 38          <li class="nav-item"><a class="nav-link {% if request.path == '/properties' %}active{% endif %}" href="/properties">Properties</a></li>
 39          {% else %}
 40          <li class="nav-item"><a class="nav-link {% if request.path == '/' %}active{% endif %}" href="/">Home</a></li>
 41          <li class="nav-item"><a class="nav-link {% if request.path == '/changelog' %}active{% endif %}" href="/changelog">Changelog</a></li>
 42          {% endif %}
 43        </ul>
 44        <ul class="navbar-nav ms-auto">
 45          {% if user.is_authenticated %}
 46          <li class="nav-item d-flex align-items-center">
 47            <form method="post" action="{{ url_for('logout') }}" class="d-inline">
 48              <button type="submit" class="btn btn-sm btn-outline-light">Logout</button>
 49            </form>
 50          </li>
 51          {% else %}
 52          <li class="nav-item d-flex align-items-center">
 53            <a href="{{ url_for('login') }}" class="btn btn-sm btn-outline-light">Login</a>
 54          </li>
 55          {% endif %}
 56        </ul>
 57      </div>
 58    </div>
 59  </nav>
 60  {% endblock %}
 61
 62  {% block breadcrumb_wrapper %}
 63  <div class="breadcrumb-bar py-2 overflow-auto d-print-none">
 64    <div class="container">
 65      {% block breadcrumbs %}{% endblock %}
 66    </div>
 67  </div>
 68  {% endblock %}
 69
 70  <main>
 71    {% block main %}{% endblock %}
 72  </main>
 73
 74  {% block footer %}
 75  <footer class="d-print-none">
 76    <div class="container">
 77      <div class="row links">
 78        <div class="col-12 col-lg-6 mb-4 mb-lg-0">
 79          <div class="h5 mb-3">// Status</div>
 80          <p>Self-hosted website monitoring by <a href="https://isaacbythewood.com/">Isaac Bythewood</a>.
 81            HTTP checks every three minutes, Lighthouse audits, SEO crawler,
 82            security header analysis. Alerts via email + Discord. Own your uptime.</p>
 83        </div>
 84        <div class="col-6 col-lg-2 offset-lg-2">
 85          <div class="h5 mb-3">// Pages</div>
 86          <ul class="list-unstyled">
 87            <li class="mb-2"><a href="/" class="link-footer">Home</a></li>
 88            <li class="mb-2"><a href="/changelog" class="link-footer">Changelog</a></li>
 89            <li class="mb-2"><a href="https://github.com/overshard/status-rust" class="link-footer" target="_blank">Source</a></li>
 90          </ul>
 91        </div>
 92        <div class="col-6 col-lg-2">
 93          <div class="h5 mb-3">// Operator</div>
 94          <ul class="list-unstyled">
 95            {% if user.is_authenticated %}
 96            <li class="mb-2"><a href="/properties" class="link-footer">Properties</a></li>
 97            <li class="mb-2">
 98              <form method="post" action="{{ url_for('logout') }}" class="d-inline">
 99                <button type="submit" class="btn btn-link link-footer p-0 align-baseline text-start">Logout</button>
100              </form>
101            </li>
102            {% else %}
103            <li class="mb-2"><a href="{{ url_for('login') }}" class="link-footer">Login</a></li>
104            {% endif %}
105          </ul>
106        </div>
107      </div>
108    </div>
109  </footer>
110
111  <div class="footer-bar d-print-none">
112    <div class="container">
113      <div class="row align-items-center">
114        <div class="col-sm-6 d-flex align-items-center justify-content-center justify-content-sm-start order-1 order-sm-0">
115          <small>&copy; {{ now.year }} Isaac Bythewood · Some rights reserved</small>
116        </div>
117        <div class="col-sm-6 d-flex justify-content-center justify-content-sm-end py-3 py-sm-0">
118          <a href="https://github.com/overshard/status-rust" target="_blank" class="footer-bar-link" aria-label="GitHub">
119            <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="currentColor" viewBox="0 0 16 16">
120              <path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.012 8.012 0 0 0 16 8c0-4.42-3.58-8-8-8z"/>
121            </svg>
122          </a>
123        </div>
124      </div>
125    </div>
126  </div>
127  {% endblock %}
128
129  <script type="module" src="{{ vite_asset('static_src/base/index.js') }}"></script>
130  {% block extra_js %}{% endblock %}
131</body>
132</html>