Single-binary self-hosted market watcher for stocks, ETFs, indexes, and futures: live charts, key stats, fundamentals, SEC filings, and SSE streaming.
axumdockerfinancerustself-hostedsqlitestocksvite
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, viewport-fit=cover">
6 <title>{% block title %}{{ title }}{% endblock %} · {{ site.title }}</title>
7 <meta name="description" content="{% block description %}Track stocks, ETFs, and indexes with live charts, fundamentals, and SEC filings.{% endblock %}">
8 {% if base_url %}<base href="{{ base_url }}">{% endif %}
9 <meta name="theme-color" content="#f0ece1">
10 <link rel="icon" type="image/svg+xml" href="/favicon.ico">
11 {% block extra_head %}{% endblock %}
12 <link rel="stylesheet" href="{{ vite_asset('static_src/base/index.js', 'css') }}">
13 {% block extra_css %}{% endblock %}
14</head>
15<body>
16 <header class="topbar">
17 <div class="topbar__inner">
18 <a class="brand" href="/">
19 {# Paper Ledger mark: a rising figures line over the accountant's
20 double underline (the ledger sign for a finalized total). #}
21 <svg viewBox="0 0 32 32" fill="none" aria-hidden="true">
22 <polyline points="4,20 12,14 19,17 28,7" stroke="currentColor" stroke-width="2.6" stroke-linecap="round" stroke-linejoin="round"/>
23 <circle cx="28" cy="7" r="2" fill="currentColor"/>
24 <line x1="4" y1="26" x2="28" y2="26" stroke="currentColor" stroke-width="2" stroke-linecap="round"/>
25 <line x1="4" y1="30" x2="28" y2="30" stroke="currentColor" stroke-width="2" stroke-linecap="round"/>
26 </svg>
27 <span class="brand__name">{{ site.title }}</span>
28 </a>
29 <form class="search" action="/search" method="get" role="search">
30 <input type="search" name="q" placeholder="Search ticker or company" autocomplete="off" aria-label="Search">
31 </form>
32 <nav class="topnav">
33 <a href="/"{% if request.path == '/' %} class="is-active"{% endif %}>Markets</a>
34 <a href="/search"{% if request.path == '/search' %} class="is-active"{% endif %}>Search</a>
35 </nav>
36 {% include "includes/status_indicator.html" %}
37 </div>
38 </header>
39
40 <main>
41 {% block main %}{% endblock %}
42 </main>
43
44 <nav class="bottomnav">
45 <a href="/"{% if request.path == '/' %} class="is-active"{% endif %}>
46 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><path d="M4 19V11M10 19V5M16 19v-6M21 19H3"/></svg>
47 <span>Markets</span>
48 </a>
49 <a href="/search"{% if request.path == '/search' %} class="is-active"{% endif %}>
50 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><circle cx="11" cy="11" r="7"/><path d="M21 21l-4.3-4.3"/></svg>
51 <span>Search</span>
52 </a>
53 </nav>
54
55 {# Two-tier footer (Phase 7), modeled on the sibling apps' pattern (repos'
56 `footer__grid` with `// LABEL` mono headers) but in Paper Ledger tokens: a
57 multi-column upper block over a slim copyright bar. The data attribution
58 (was the old one-line footer) folds into the About column. #}
59 <footer class="footer">
60 <div class="wrap footer__grid">
61 <div class="footer__about">
62 <div class="footer__label">// {{ site.title }}</div>
63 <p>A self-hosted market watcher for stocks, ETFs, indexes, and
64 commodities: live charts, key stats, fundamentals, SEC filings, and
65 at-a-glance health reads. For watching the market only — no
66 portfolio, no accounts.</p>
67 <p class="footer__attrib">Market data via <span>Yahoo Finance</span> ·
68 fundamentals & filings via <span>SEC EDGAR</span> · prices are
69 delayed · <strong>not investment advice</strong>.</p>
70 </div>
71 <div class="footer__col">
72 <div class="footer__label">// Pages</div>
73 <ul>
74 <li><a href="/">Markets</a></li>
75 <li><a href="/search">Search</a></li>
76 <li><a href="/health">Data health</a></li>
77 <li><a href="https://github.com/overshard/finance-rust" target="_blank" rel="noopener">Source</a></li>
78 </ul>
79 </div>
80 </div>
81 </footer>
82
83 <div class="footer-bar">
84 <div class="wrap footer-bar__row">
85 <small>© {{ now.year }} Isaac Bythewood · Some rights reserved</small>
86 <a href="https://github.com/overshard/finance-rust" target="_blank" rel="noopener" class="footer-bar__link" aria-label="Source on GitHub">
87 <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="currentColor" viewBox="0 0 16 16" aria-hidden="true">
88 <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"/>
89 </svg>
90 </a>
91 </div>
92 </div>
93
94 <script type="module" src="{{ vite_asset('static_src/base/index.js') }}"></script>
95 {% block extra_js %}{% endblock %}
96</body>
97</html>