Skip to main content

max / makenotwork

3.4 KB · 65 lines History Blame Raw
1 {# Everything from <!doctype> down to the last script in the head is quasi's,
2 emitted by the same shell a described screen renders through. See
3 crate::shell: the site is being converted a screen at a time, and two heads
4 written by two hands drift in ways nothing catches. What is left here is
5 what a template has to own, because Askama renders these blocks in place and
6 no caller ever holds them as a string. #}
7 {{ crate::shell::head()|safe }}
8 {% if let Some(token) = csrf_token %}<meta name="csrf-token" content="{{ token }}">{% endif %}
9 <title>{% block title %}Makenotwork{% endblock %}</title>
10 <meta name="description" content="{% block meta_description %}Sell your work directly. 0% platform fee, only Stripe's ~3% processing. Music, software, writing, and more.{% endblock %}">
11
12 {# Global OG / Twitter card metadata. Per-page templates emit their own
13 og:title / og:description / og:image / og:url / twitter:* tags from
14 within {% block head %}; only the page-invariant tags live here.
15 Pages without overrides (cart, library, policy) get a generic but
16 valid card from site_name + type + card. #}
17 <meta property="og:site_name" content="Makenotwork">
18 <meta property="og:type" content="website">
19 <meta name="twitter:card" content="summary_large_image">
20
21 {% block head %}{% endblock %}
22 </head>
23 <body{{ crate::shell::body_attrs()|safe }}{% block body_attrs %}{% endblock %}>
24 <a href="#main-content" class="skip-to-main">Skip to main content</a>
25 <main id="main-content">
26 {% block content %}{% endblock %}
27 </main>
28
29 <footer class="site-footer">
30 <div class="site-footer-links">
31 <a href="/pricing">Pricing</a>
32 <a href="/creators">Creators</a>
33 <a href="/docs">Docs</a>
34 <a href="/policy">Legal</a>
35 <a href="/docs/credits">Credits</a>
36 {# Linked only while a published changelog project exists; the route
37 404s otherwise. See crate::changelog. #}
38 {% if crate::changelog::is_published() %}<a href="/changelog">Changelog</a>{% endif %}
39 <a href="mailto:info@makenot.work">Contact</a>
40 <a href="/health" title="Service status and uptime">Status</a>
41 <a href="#" data-prevent data-action="showWhatsNewModal">What's new</a>
42 <a href="#" data-prevent data-action="toggleShortcutsHelp" title="Keyboard shortcuts (?)">Shortcuts</a>
43 </div>
44 <p>&copy; 2026 Make Creative, LLC</p>
45 </footer>
46
47 <!-- Toast notification container -->
48 <div id="notifications" class="toast-container" role="alert" aria-live="polite"></div>
49
50 <!-- Delegated on* handlers, extracted from inline attributes so the CSP can
51 drop script-src 'unsafe-inline'. The data-action dispatcher + core
52 primitives now live in the typed core module (frontend/src/core),
53 loaded as an ES module in <head> via crate::shell; these classic
54 shims resolve through its registry / window bridge. -->
55 <script src="/static/actions-pages.js?v=0701"></script>
56 <script src="/static/actions-partials.js?v=0701"></script>
57 <script src="/static/actions-tabs.js?v=0701"></script>
58 <script src="/static/actions-dashboards.js?v=0701"></script>
59 <script src="/static/synckit-billing.js?v=0620"></script>
60 <script src="/static/synckit-tabs.js?v=0623"></script>
61 <script src="/static/whats_new.js?v=0522"></script>
62 {% block scripts %}{% endblock %}
63 </body>
64 </html>
65