A decentralized event management and credentialing system built on atproto.
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 %}