Member invites, gallery resync, content and operator docs
- Invite flow: admin issue/revoke on join requests, public single-use claim links (hash-only tokens, 7-day expiry, no state reveal), claim creates the Member account and marks the request accepted - Gallery: admin status page plus resync endpoint; sync refreshes thumbnails whose content changed; tools/gallery contract and checker - Docs: public content page, admin-only operator runbook, api.md invite/gallery sections, all routes in the live API docs, docs reachability gate test - Screenshots cover the new pages; version 1.0.18
This commit is contained in:
@@ -0,0 +1,18 @@
|
||||
<!-- retoor <retoor@molodetz.nl> -->
|
||||
{% extends "admin/base_admin.html" %}
|
||||
{% block admin_content %}
|
||||
<h1>Gallery</h1>
|
||||
<div class="stat-cards">
|
||||
<div class="stat-card"><span class="value">{{ flyers }}</span><span class="name">Flyers</span></div>
|
||||
<div class="stat-card"><span class="value">{{ memes }}</span><span class="name">Memes</span></div>
|
||||
</div>
|
||||
{% if missing %}
|
||||
<div class="notice error" role="alert"><p>Missing source files:</p><ul>{% for filename in missing %}<li><code>{{ filename }}</code></li>{% endfor %}</ul></div>
|
||||
{% else %}
|
||||
<p class="muted">All catalogued source files are present.</p>
|
||||
{% endif %}
|
||||
<form method="post" action="/admin/gallery/resync">
|
||||
<div class="actions"><button class="button" type="submit" data-loading>Resync gallery</button></div>
|
||||
</form>
|
||||
<p class="muted">Resync re-reads the source files, refreshes changed thumbnails and retires removed entries. New works arrive through deploy first.</p>
|
||||
{% endblock %}
|
||||
Reference in New Issue
Block a user