A decentralized event management and credentialing system built on atproto.
1{% extends "admin_base.html" %}
2
3{% block title %}Event Management - Admin Panel{% endblock %}
4
5{% block content %}
6<!-- Page Header -->
7<div class="content">
8 <div class="is-pulled-right">
9 <a href="/admin/events/import" class="button is-primary">Import Events</a>
10 </div>
11 <h1 class="title is-4">Event Management</h1>
12 <p class="subtitle is-6">
13 {{ total_count }} events
14 {% if search_term %}
15 - Search results for: "<strong>{{ search_term }}</strong>"
16 {% endif %}
17 </p>
18</div>
19
20<!-- Events Table -->
21{% if events %}
22<div class="box">
23 <div class="table-container">
24 <table class="table is-fullwidth is-striped is-hoverable">
25 <thead>
26 <tr>
27 <th>AT-URI</th>
28 <th>CID</th>
29 <th>Updated</th>
30 <th width="100">Actions</th>
31 </tr>
32 </thead>
33 <tbody>
34 {% for event in events %}
35 <tr>
36 <td>
37 <div style="word-break: break-all;">
38 <code class="has-text-info">{{ event.aturi }}</code>
39 {% if event.title %}
40 <br>
41 <small class="has-text-grey">{{ event.title }}</small>
42 {% endif %}
43 </div>
44 </td>
45 <td>
46 <div style="word-break: break-all;">
47 <code class="is-size-7 has-text-grey">{{ event.cid }}</code>
48 </div>
49 </td>
50 <td>
51 <span class="is-size-7 has-text-grey">
52 {{ event.updated_at }}
53 </span>
54 </td>
55 <td>
56 <a href="/admin/events?aturi={{ event.aturi | urlencode }}&cid={{ event.cid | urlencode }}"
57 class="button is-small is-info">
58 View
59 </a>
60 </td>
61 </tr>
62 {% endfor %}
63 </tbody>
64 </table>
65 </div>
66
67 <!-- Pagination -->
68 {{ view_pagination(pagination) }}
69</div>
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 Events Found</h3>
75 <p class="has-text-grey">
76 {% if search_term %}
77 No events found matching your search criteria. Try a different search term or clear the search.
78 {% else %}
79 No events have been imported yet. Import your first batch of events to get started.
80 {% endif %}
81 </p>
82 <a href="/admin/events/import" class="button is-primary">Import Events</a>
83 </div>
84</div>
85{% endif %}
86
87<!-- Help Section -->
88<div class="box">
89 <div class="content">
90 <h4 class="title is-6">About Event Management</h4>
91 <p class="is-size-7">
92 Events are stored as JSON records with AT Protocol URIs as identifiers. Key features:
93 </p>
94 <ul class="is-size-7">
95 <li><strong>AT-URI:</strong> Unique identifier in AT Protocol format (e.g., at://did:plc:abc/community.lexicon.calendar.event/xyz)</li>
96 <li><strong>JSON Records:</strong> Full structured event data including title, description, dates, and metadata</li>
97 <li><strong>Search:</strong> Find events by title or description content</li>
98 <li><strong>Import:</strong> Bulk import events from JSON arrays</li>
99 </ul>
100 <div class="notification is-info is-light mt-4">
101 <p class="is-size-7">
102 <strong>Import Format:</strong> Events should be provided as a JSON array with each event containing at minimum an
103 <code>aturi</code> or <code>uri</code> field and structured event data.
104 </p>
105 </div>
106 </div>
107</div>
108{% endblock %}