A decentralized event management and credentialing system built on atproto.
at main 103 lines 4.0 kB view raw
1{% extends "admin_base.html" %} 2 3{% block title %}RSVP Records - Admin Panel{% endblock %} 4 5{% block content %} 6<!-- Page Header --> 7<div class="content"> 8 <h1 class="title is-4">RSVP Records</h1> 9 <p class="subtitle is-6">{{ total_rsvps }} records ({{ current_page }} of {{ total_pages }} pages)</p> 10</div> 11 12<!-- RSVP Records Table --> 13{% if rsvps %} 14<div class="box"> 15 <div class="table-container"> 16 <table class="table is-fullwidth is-striped is-hoverable"> 17 <thead> 18 <tr> 19 <th>User DID</th> 20 <th>Status</th> 21 <th>Event Subject</th> 22 <th>Indexed At</th> 23 <th width="150">Actions</th> 24 </tr> 25 </thead> 26 <tbody> 27 {% for rsvp in rsvps %} 28 <tr> 29 <td> 30 <div class="is-size-7" style="word-break: break-all;"> 31 <code class="has-text-info">{{ rsvp.did }}</code> 32 </div> 33 </td> 34 <td> 35 {% if rsvp.status == "going" %} 36 <span class="tag is-success">Going</span> 37 {% elif rsvp.status == "interested" %} 38 <span class="tag is-warning">Interested</span> 39 {% elif rsvp.status == "not_going" or rsvp.status == "no" %} 40 <span class="tag is-danger">Not Going</span> 41 {% else %} 42 <span class="tag is-light">{{ rsvp.status | title }}</span> 43 {% endif %} 44 </td> 45 <td> 46 <div class="is-size-7" style="word-break: break-all;"> 47 <code class="has-text-grey">{{ rsvp.event_subject }}</code> 48 </div> 49 </td> 50 <td> 51 <span class="is-size-7 has-text-grey">{{ rsvp.indexed_at }}</span> 52 </td> 53 <td> 54 <a href="/admin/rsvps?aturi={{ rsvp.aturi | urlencode }}" 55 class="button is-small is-info"> 56 View 57 </a> 58 </td> 59 </tr> 60 {% endfor %} 61 </tbody> 62 </table> 63 </div> 64 65 <!-- Pagination --> 66 {{ view_pagination(pagination) }} 67</div> 68 69 70{% else %} 71<!-- Empty State --> 72<div class="box has-text-centered"> 73 <div class="content"> 74 <h3 class="title is-5 has-text-grey">No RSVP Records Found</h3> 75 <p class="has-text-grey"> 76 No RSVP records have been indexed yet. RSVPs will appear here as they are created and processed by the Jetstream consumer. 77 </p> 78 </div> 79</div> 80{% endif %} 81 82<!-- Help Section --> 83<div class="box"> 84 <div class="content"> 85 <h4 class="title is-6">About RSVP Records</h4> 86 <p class="is-size-7"> 87 RSVP records are calendar event responses stored as AT Protocol records. Each RSVP contains: 88 </p> 89 <ul class="is-size-7"> 90 <li><strong>AT-URI:</strong> The unique identifier for the RSVP record</li> 91 <li><strong>User DID:</strong> The decentralized identifier of the person RSVPing</li> 92 <li><strong>Status:</strong> going, interested, or not_going</li> 93 <li><strong>Event Subject:</strong> The AT-URI of the event being responded to</li> 94 <li><strong>CID:</strong> Content identifier for the record</li> 95 </ul> 96 <div class="notification is-info is-light mt-4"> 97 <div class="content is-size-7"> 98 <strong>Note:</strong> Records are indexed through the Jetstream consumer and may not be immediately visible after creation. 99 </div> 100 </div> 101 </div> 102</div> 103{% endblock %}