repos
/ status-django master

status-django

mirror archived upstream

Self-hostable uptime monitor and status page on Django: HTTP checks, Lighthouse audits, SEO crawls, and email and Discord alerts.

djangodockerhandcodedpythonself-hostedsqlitestatus-pageuptime-monitoringvite

7.0 KB · 157 lines · HTML Raw History
  1{% load static %}
  2
  3<!doctype html>
  4<html lang="en">
  5
  6<head>
  7  <meta charset="utf-8">
  8  <meta name="viewport" content="width=device-width, initial-scale=1">
  9  <title>{% block title %}{{ title }}{% endblock %} · Status</title>
 10  <meta name="description" content="{% block description %}{{ description }}{% endblock %}">
 11  <link rel="canonical" href="{{ canonical }}">
 12
 13  {% if BASE_URL %}
 14  <base href="{{ BASE_URL }}">
 15  {% endif %}
 16
 17  <link rel="icon" type="image/svg+xml" href="{% url 'favicon' %}">
 18
 19  {% block extra_head %}{% endblock %}
 20
 21  <link href="{% static 'base.css' %}" rel="stylesheet">
 22  {% block extra_css %}{% endblock %}
 23</head>
 24
 25<body>
 26  {% include 'includes/messages.html' %}
 27
 28  {% block nav %}
 29  <nav class="navbar navbar-dark navbar-expand-md d-print-none">
 30    <div class="container">
 31      <a class="navbar-brand" href="/">
 32        <span class="logo" aria-hidden="true">
 33          <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64">
 34            <polyline points="2,34 18,34 24,28 30,14 36,52 42,20 48,34 62,34"
 35              fill="none" stroke="#6b9e78" stroke-width="6"
 36              stroke-linejoin="round" stroke-linecap="round"/>
 37            <circle cx="30" cy="14" r="3.5" fill="#c9a84c"/>
 38          </svg>
 39        </span>
 40        <span class="brand-text">Status</span>
 41        <span class="brand-dot" aria-hidden="true"></span>
 42      </a>
 43      <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">
 44        <span class="navbar-toggler-icon"></span>
 45      </button>
 46      <div class="collapse navbar-collapse" id="navMain">
 47        <ul class="navbar-nav ms-3">
 48          {% if user.is_authenticated %}
 49          <li class="nav-item"><a class="nav-link {% if request.path == '/properties/' %}active{% endif %}" href="/properties/">Properties</a></li>
 50          <li class="nav-item"><a class="nav-link {% if request.path == '/accounts/profile/' %}active{% endif %}" href="/accounts/profile/">Profile</a></li>
 51          {% else %}
 52          <li class="nav-item"><a class="nav-link {% if request.path == '/' %}active{% endif %}" href="/">Home</a></li>
 53          <li class="nav-item"><a class="nav-link {% if request.path == '/changelog/' %}active{% endif %}" href="/changelog/">Changelog</a></li>
 54          {% endif %}
 55        </ul>
 56        <ul class="navbar-nav ms-auto">
 57          {% if user.is_authenticated %}
 58          <li class="nav-item d-flex align-items-center">
 59            <form method="post" action="{% url 'logout' %}" class="d-inline">
 60              {% csrf_token %}
 61              <button type="submit" class="btn btn-sm btn-outline-light">Logout</button>
 62            </form>
 63          </li>
 64          {% else %}
 65          <li class="nav-item d-flex align-items-center">
 66            <a href="/accounts/login/" class="btn btn-sm btn-outline-light">Login</a>
 67          </li>
 68          {% endif %}
 69        </ul>
 70      </div>
 71    </div>
 72  </nav>
 73  {% endblock %}
 74
 75  {% block breadcrumb_wrapper %}
 76  <div class="breadcrumb-bar py-2 overflow-auto d-print-none">
 77    <div class="container">
 78      {% block breadcrumbs %}{% endblock %}
 79    </div>
 80  </div>
 81  {% endblock %}
 82
 83  <main>
 84    {% block main %}{% endblock %}
 85  </main>
 86
 87  {% block footer %}
 88  <footer class="d-print-none">
 89    <div class="container">
 90      <div class="row links">
 91        <div class="col-12 col-lg-6 mb-4 mb-lg-0">
 92          <div class="h5 mb-3">// Status</div>
 93          <p>Self-hosted website monitoring by <a href="https://isaacbythewood.com/">Isaac Bythewood</a>.
 94            HTTP checks every three minutes, Lighthouse audits, SEO crawler,
 95            security header analysis. Alerts via email + Discord. Own your uptime.</p>
 96        </div>
 97        <div class="col-6 col-lg-2 offset-lg-2">
 98          <div class="h5 mb-3">// Pages</div>
 99          <ul class="list-unstyled">
100            <li class="mb-2"><a href="/" class="link-footer">Home</a></li>
101            <li class="mb-2"><a href="/changelog/" class="link-footer">Changelog</a></li>
102            <li class="mb-2"><a href="https://github.com/overshard/status-django" class="link-footer" target="_blank">Source</a></li>
103          </ul>
104        </div>
105        <div class="col-6 col-lg-2">
106          <div class="h5 mb-3">// Accounts</div>
107          <ul class="list-unstyled">
108            {% if user.is_authenticated %}
109            <li class="mb-2"><a href="/properties/" class="link-footer">Properties</a></li>
110            <li class="mb-2"><a href="/accounts/profile/" class="link-footer">Profile</a></li>
111            <li class="mb-2">
112              <form method="post" action="{% url 'logout' %}" class="d-inline">
113                {% csrf_token %}
114                <button type="submit" class="btn btn-link link-footer p-0 align-baseline text-start">Logout</button>
115              </form>
116            </li>
117            {% else %}
118            <li class="mb-2"><a href="/accounts/login/" class="link-footer">Login</a></li>
119            <li class="mb-2"><a href="/accounts/password-reset/" class="link-footer">Password reset</a></li>
120            {% endif %}
121          </ul>
122        </div>
123      </div>
124    </div>
125  </footer>
126
127  <div class="footer-bar d-print-none">
128    <div class="container">
129      <div class="row align-items-center">
130        <div class="col-sm-6 d-flex align-items-center justify-content-center justify-content-sm-start order-1 order-sm-0">
131          <small>&copy; {% now 'Y' %} Isaac Bythewood · Some rights reserved</small>
132        </div>
133        <div class="col-sm-6 d-flex justify-content-center justify-content-sm-end py-3 py-sm-0">
134          <a href="https://github.com/overshard/status-django" target="_blank" class="footer-bar-link" aria-label="GitHub">
135            <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="currentColor" viewBox="0 0 16 16">
136              <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"/>
137            </svg>
138          </a>
139          <a href="https://isaacbythewood.com/" target="_blank" class="logo logo-sm ms-3" aria-label="Isaac Bythewood">
140            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64">
141              <polyline points="2,34 18,34 24,28 30,14 36,52 42,20 48,34 62,34"
142                fill="none" stroke="#6b9e78" stroke-width="6"
143                stroke-linejoin="round" stroke-linecap="round"/>
144              <circle cx="30" cy="14" r="3.5" fill="#c9a84c"/>
145            </svg>
146          </a>
147        </div>
148      </div>
149    </div>
150  </div>
151  {% endblock %}
152
153  <script type="module" src="{% static 'base.js' %}"></script>
154  {% block extra_js %}{% endblock %}
155</body>
156</html>