408fde440d
Photograph/screenshot a boarding pass, decode its BCBP barcode (PDF417/ Aztec/QR/DataMatrix), fetch the historical flight track from FlightAware the day after the flight, stage it for review, and write it into AirTrail via its REST API on approval. ntfy notifications carry signed Approve/Deny/Investigate actions.
36 lines
1.3 KiB
HTML
36 lines
1.3 KiB
HTML
<!doctype html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<title>{% block title %}Boarding Pass{% endblock %}</title>
|
|
<script>
|
|
(function () {
|
|
var saved = localStorage.getItem("theme");
|
|
if (saved === "light" || saved === "dark") {
|
|
document.documentElement.classList.add(saved);
|
|
}
|
|
})();
|
|
</script>
|
|
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;700&family=JetBrains+Mono:wght@400;500&display=swap">
|
|
<link rel="stylesheet" href="{{ url_for('static', filename='css/app.css') }}">
|
|
{% block extra_head %}{% endblock %}
|
|
</head>
|
|
<body>
|
|
<header class="topbar">
|
|
<nav class="topbar-nav">
|
|
<a href="{{ url_for('upload.upload') }}" class="brand">Boarding Pass</a>
|
|
<a href="{{ url_for('upload.upload') }}">Upload</a>
|
|
<a href="{{ url_for('review.list_flights') }}">Review</a>
|
|
<a href="{{ url_for('settings.settings') }}">Settings</a>
|
|
</nav>
|
|
<button type="button" id="theme-toggle" class="icon-btn" aria-label="Toggle theme">☼</button>
|
|
</header>
|
|
<main class="page">
|
|
{% block content %}{% endblock %}
|
|
</main>
|
|
<script src="{{ url_for('static', filename='js/app.js') }}"></script>
|
|
{% block extra_scripts %}{% endblock %}
|
|
</body>
|
|
</html>
|