privateuserh commited on
Commit
1d0466d
·
verified ·
1 Parent(s): b4b3f96

Add 3 files

Browse files
Files changed (3) hide show
  1. README.md +7 -5
  2. index.html +359 -19
  3. prompts.txt +1 -0
README.md CHANGED
@@ -1,10 +1,12 @@
1
  ---
2
- title: Chandelier Events Booking
3
- emoji: 📚
4
- colorFrom: pink
5
- colorTo: gray
6
  sdk: static
7
  pinned: false
 
 
8
  ---
9
 
10
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
1
  ---
2
+ title: chandelier-events-booking
3
+ emoji: 🐳
4
+ colorFrom: blue
5
+ colorTo: yellow
6
  sdk: static
7
  pinned: false
8
+ tags:
9
+ - deepsite
10
  ---
11
 
12
+ Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
index.html CHANGED
@@ -1,19 +1,359 @@
1
- <!doctype html>
2
- <html>
3
- <head>
4
- <meta charset="utf-8" />
5
- <meta name="viewport" content="width=device-width" />
6
- <title>My static Space</title>
7
- <link rel="stylesheet" href="style.css" />
8
- </head>
9
- <body>
10
- <div class="card">
11
- <h1>Welcome to your static Space!</h1>
12
- <p>You can modify this app directly by editing <i>index.html</i> in the Files and versions tab.</p>
13
- <p>
14
- Also don't forget to check the
15
- <a href="https://huggingface.co/docs/hub/spaces" target="_blank">Spaces documentation</a>.
16
- </p>
17
- </div>
18
- </body>
19
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Booking Confirmation | Event Management</title>
7
+ <script src="https://cdn.tailwindcss.com"></script>
8
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
9
+ <style>
10
+ .confetti {
11
+ position: fixed;
12
+ width: 10px;
13
+ height: 10px;
14
+ background-color: #f00;
15
+ opacity: 0.7;
16
+ animation: fall linear forwards;
17
+ }
18
+
19
+ @keyframes fall {
20
+ to {
21
+ transform: translateY(100vh);
22
+ }
23
+ }
24
+
25
+ .checked-in {
26
+ box-shadow: 0 0 10px 3px rgba(34, 197, 94, 0.5);
27
+ border: 2px solid #22c55e;
28
+ }
29
+
30
+ .qr-code {
31
+ transition: all 0.3s ease;
32
+ }
33
+
34
+ .qr-code:hover {
35
+ transform: scale(1.05);
36
+ }
37
+ </style>
38
+ </head>
39
+ <body class="bg-gray-50 min-h-screen">
40
+ <div class="container mx-auto px-4 py-12">
41
+ <!-- Main Booking Confirmation Card -->
42
+ <div class="max-w-4xl mx-auto bg-white rounded-xl shadow-md overflow-hidden transition-all duration-300 hover:shadow-xl">
43
+ <div class="p-1 bg-gradient-to-r from-purple-600 via-pink-500 to-red-500"></div>
44
+
45
+ <div class="p-8">
46
+ <!-- Header -->
47
+ <div class="flex flex-col md:flex-row justify-between items-start md:items-center mb-8">
48
+ <div>
49
+ <div class="flex items-center space-x-2">
50
+ <i class="fas fa-calendar-check text-3xl text-purple-600"></i>
51
+ <h1 class="text-3xl font-bold text-gray-800">Booking Confirmed!</h1>
52
+ </div>
53
+ <p class="text-gray-600 mt-2">Thank you for your booking. Here are your details.</p>
54
+ </div>
55
+ <div class="mt-4 md:mt-0 bg-purple-100 text-purple-800 px-4 py-2 rounded-lg font-medium">
56
+ <i class="fas fa-bolt mr-1"></i> Status: Confirmed
57
+ </div>
58
+ </div>
59
+
60
+ <div class="border-b border-gray-200 my-6"></div>
61
+
62
+ <!-- Booking Details -->
63
+ <div class="grid grid-cols-1 md:grid-cols-2 gap-8">
64
+ <div>
65
+ <h2 class="text-xl font-semibold text-gray-800 mb-4">Booking Information</h2>
66
+
67
+ <div class="space-y-4">
68
+ <div>
69
+ <p class="text-sm text-gray-500">Booking ID</p>
70
+ <div id="bookingId" class="flex items-center mt-1">
71
+ <span class="font-mono bg-gray-100 px-3 py-1 rounded text-gray-800 text-lg font-bold">#</span>
72
+ <button onclick="copyBookingId()" class="ml-2 text-purple-600 hover:text-purple-800 transition">
73
+ <i class="far fa-copy"></i> Copy
74
+ </button>
75
+ </div>
76
+ </div>
77
+
78
+ <div>
79
+ <p class="text-sm text-gray-500">Event Name</p>
80
+ <p class="font-medium text-gray-800">LIVE Music Night with The Midnight Stars</p>
81
+ </div>
82
+
83
+ <div>
84
+ <p class="text-sm text-gray-500">Date & Time</p>
85
+ <p class="font-medium text-gray-800">June 15, 2023 • 7:00 PM - 10:00 PM</p>
86
+ </div>
87
+
88
+ <div>
89
+ <p class="text-sm text-gray-500">Location</p>
90
+ <p class="font-medium text-gray-800">Grand Ballroom, The Plaza Hotel</p>
91
+ </div>
92
+
93
+ <div>
94
+ <p class="text-sm text-gray-500">Number of Guests</p>
95
+ <p class="font-medium text-gray-800">4 people</p>
96
+ </div>
97
+ </div>
98
+ </div>
99
+
100
+ <div>
101
+ <h2 class="text-xl font-semibold text-gray-800 mb-4">Your Tickets</h2>
102
+
103
+ <div id="ticketList" class="space-y-3">
104
+ <!-- Tickets will be added here dynamically -->
105
+ </div>
106
+
107
+ <div class="mt-6">
108
+ <button onclick="generateAttendeeCodes()" class="flex items-center bg-purple-600 hover:bg-purple-700 text-white px50 py-2 rounded-lg transition">
109
+ <i class="fas fa-qrcode mr-2"></i> Generate Attendee ID Codes
110
+ </button>
111
+ </div>
112
+ </div>
113
+ </div>
114
+
115
+ <!-- Attendance Section - Hidden by default -->
116
+ <div id="attendanceSection" class="mt-12 hidden">
117
+ <div class="border-b border-gray-200 my-6"></div>
118
+
119
+ <div class="flex flex-col md:flex-row justify-between items-start md:items-center mb-6">
120
+ <h2 class="text-xl font-semibold text-gray-800">Attendance Confirmation</h2>
121
+ <div class="mt-2 md:mt-0 text-sm text-gray-600">
122
+ <i class="fas fa-info-circle mr-1"></i> Share these codes with your attendees
123
+ </div>
124
+ </div>
125
+
126
+ <div id="qrCodesContainer" class="grid grid-cols-1 sm:grid-cols-2 md:grid-cols-4 gap-4">
127
+ <!-- QR codes will be added here -->
128
+ </div>
129
+
130
+ <div class="mt-8 bg-blue-50 border border-blue-200 rounded-lg p-4">
131
+ <h3 class="font-medium text-blue-800 mb-2"><i class="fas fa-user-check mr-1"></i> Attendance Tracker</h3>
132
+ <p class="text-blue-700 text-sm">Enter an attendee code below to confirm attendance:</p>
133
+
134
+ <div class="flex mt-3">
135
+ <input type="text" id="attendeeCodeInput" placeholder="Enter attendee code" class="flex-grow border border-gray-300 rounded-l-lg px-4 py-2 focus:outline-none focus:ring-2 focus:ring-blue-500">
136
+ <button onclick="confirmAttendance()" class="bg-blue-600 hover:bg-blue-700 text-white px-4 py-2 rounded-r-lg transition">
137
+ <i class="fas fa-check mr-1"></i> Confirm
138
+ </button>
139
+ </div>
140
+
141
+ <div id="attendanceResult" class="mt-2 text-sm hidden"></div>
142
+ </div>
143
+ </div>
144
+
145
+ <!-- Actions -->
146
+ <div class="mt-10 flex flex-col sm:flex-row space-y-3 sm:space-y-0 sm:space-x-4">
147
+ <button class="flex-1 bg-white border border-purple-600 text-purple-600 hover:bg-purple-50 px-4 py-3 rounded-lg font-medium transition flex items-center justify-center">
148
+ <i class="fas fa-calendar-plus mr-2"></i> Add to Calendar
149
+ </button>
150
+ <button class="flex-1 bg-white border border-purple-600 text-purple-600 hover:bg-purple-50 px-4 py-3 rounded-lg font-medium transition flex items-center justify-center">
151
+ <i class="fas fa-envelope mr-2"></i> Email Details
152
+ </button>
153
+ <button class="flex-1 bg-purple-600 hover:bg-purple-700 text-white px-4 py-3 rounded-lg font-medium transition flex items-center justify-center">
154
+ <i class="fas fa-print mr-2"></i> Print Tickets
155
+ </button>
156
+ </div>
157
+ </div>
158
+ </div>
159
+ </div>
160
+
161
+ <script>
162
+ // Generate a random booking ID on page load
163
+ document.addEventListener('DOMContentLoaded', function() {
164
+ // Generate a booking ID (8 alphanumeric characters)
165
+ const bookingId = generateUniqueId(8);
166
+ document.getElementById('bookingId').querySelector('span').textContent = `#${bookingId}`;
167
+
168
+ // Store in localStorage
169
+ if(!localStorage.getItem('bookingId')) {
170
+ localStorage.setItem('bookingId', bookingId);
171
+ }
172
+
173
+ // Add confetti effect to celebrate booking
174
+ createConfetti();
175
+
176
+ // Generate sample tickets
177
+ generateTickets();
178
+ });
179
+
180
+ // Generate unique ID
181
+ function generateUniqueId(length) {
182
+ const chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
183
+ let result = '';
184
+ for (let i = 0; i < length; i++) {
185
+ result += chars.charAt(Math.floor(Math.random() * chars.length));
186
+ }
187
+ return result;
188
+ }
189
+
190
+ // Copy booking ID to clipboard
191
+ function copyBookingId() {
192
+ const bookingId = document.getElementById('bookingId').querySelector('span').textContent;
193
+ navigator.clipboard.writeText(bookingId.substring(1));
194
+
195
+ // Show tooltip or change icon to indicate copied
196
+ const button = document.getElementById('bookingId').querySelector('button');
197
+ const originalIcon = button.innerHTML;
198
+ button.innerHTML = '<i class="fas fa-check"></i> Copied!';
199
+
200
+ setTimeout(() => {
201
+ button.innerHTML = originalIcon;
202
+ }, 2000);
203
+ }
204
+
205
+ // Generate sample tickets
206
+ function generateTickets() {
207
+ const ticketTypes = ['General Admission', 'VIP Pass', 'Student Ticket'];
208
+ const ticketList = document.getElementById('ticketList');
209
+
210
+ // Clear existing tickets
211
+ ticketList.innerHTML = '';
212
+
213
+ for (let i = 1; i <= 4; i++) {
214
+ const randomType = ticketTypes[Math.floor(Math.random() * ticketTypes.length)];
215
+ const ticketHtml = `
216
+ <div class="flex items-center justify-between bg-gray-50 p-3 rounded-lg">
217
+ <div>
218
+ <p class="font-medium text-gray-800">Ticket #${i}</p>
219
+ <p class="text-sm text-gray-600">${randomType}</p>
220
+ </div>
221
+ <span class="bg-gray-200 text-gray-700 text-xs font-medium px-2.5 py-0.5 rounded">Pending ID</span>
222
+ </div>
223
+ `;
224
+ ticketList.insertAdjacentHTML('beforeend', ticketHtml);
225
+ }
226
+ }
227
+
228
+ // Generate attendee codes and QR codes
229
+ function generateAttendeeCodes() {
230
+ const bookingId = localStorage.getItem('bookingId');
231
+ const qrCodesContainer = document.getElementById('qrCodesContainer');
232
+
233
+ // Clear existing QR codes
234
+ qrCodesContainer.innerHTML = '';
235
+
236
+ // Generate 4 unique attendee codes (based on booking ID + attendee number)
237
+ for (let i = 1; i <= 4; i++) {
238
+ const attendeeCode = `${bookingId}-${generateUniqueId(3)}-${i}`;
239
+ const qrCodeHtml = `
240
+ <div class="bg-white p-4 rounded-lg shadow-md text-center">
241
+ <div class="qr-code bg-white p-2 inline-block mb-2">
242
+ <!-- This would be replaced with a real QR code generator in production -->
243
+ <div class="grid grid-cols-5 gap-1 w-32 h-32 flex items-center justify-center border-2 border-gray-300">
244
+ ${Array(25).fill().map((_, idx) =>
245
+ `<div class="w-full h-full ${Math.random() > 0.6 ? 'bg-gray-800' : 'bg-white'}"></div>`
246
+ ).join('')}
247
+ </div>
248
+ </div>
249
+ <p class="font-mono text-sm mt-2 px-2 py-1 bg-gray-100 rounded">${attendeeCode}</p>
250
+ <p class="text-xs text-gray-500 mt-1">Ticket #${i}</p>
251
+ <button onclick="copyCode('${attendeeCode}')" class="mt-2 text-xs text-purple-600 hover:text-purple-800 transition">
252
+ <i class="far fa-copy mr-1"></i> Copy Code
253
+ </button>
254
+ </div>
255
+ `;
256
+ qrCodesContainer.insertAdjacentHTML('beforeend', qrCodeHtml);
257
+
258
+ // Update the ticket list with the generated IDs
259
+ const ticketSpans = document.querySelectorAll('#ticketList span');
260
+ ticketSpans[i-1].textContent = attendeeCode;
261
+ ticketSpans[i-1].className = 'bg-green-100 text-green-800 text-xs font-medium px-2.5 py-0.5 rounded';
262
+
263
+ // Store attendee codes in localStorage
264
+ if(!localStorage.getItem('attendeeCodes')) {
265
+ localStorage.setItem('attendeeCodes', JSON.stringify([]));
266
+ }
267
+
268
+ const currentCodes = JSON.parse(localStorage.getItem('attendeeCodes'));
269
+ if(!currentCodes.includes(attendeeCode)) {
270
+ currentCodes.push(attendeeCode);
271
+ localStorage.setItem('attendeeCodes', JSON.stringify(currentCodes));
272
+ }
273
+ }
274
+
275
+ // Show the attendance section
276
+ document.getElementById('attendanceSection').classList.remove('hidden');
277
+ }
278
+
279
+ // Copy attendee code
280
+ function copyCode(code) {
281
+ navigator.clipboard.writeText(code);
282
+
283
+ // Find the button that was clicked and update it temporarily
284
+ const buttons = document.querySelectorAll('button[onclick^="copyCode"]');
285
+ buttons.forEach(button => {
286
+ if (button.getAttribute('onclick').includes(code)) {
287
+ const originalHtml = button.innerHTML;
288
+ button.innerHTML = '<i class="fas fa-check"></i> Copied!';
289
+
290
+ setTimeout(() => {
291
+ button.innerHTML = originalHtml;
292
+ }, 2000);
293
+ }
294
+ });
295
+ }
296
+
297
+ // Confirm attendance for an attendee
298
+ function confirmAttendance() {
299
+ const input = document.getElementById('attendeeCodeInput');
300
+ const code = input.value.trim();
301
+ const resultDiv = document.getElementById('attendanceResult');
302
+
303
+ // Get stored attendee codes
304
+ const attendeeCodes = JSON.parse(localStorage.getItem('attendeeCodes') || '[]');
305
+
306
+ if (!code) {
307
+ resultDiv.textContent = 'Please enter an attendee code';
308
+ resultDiv.className = 'mt-2 text-sm text-red-600';
309
+ resultDiv.classList.remove('hidden');
310
+ return;
311
+ }
312
+
313
+ if (attendeeCodes.includes(code)) {
314
+ resultDiv.textContent = `Attendance confirmed for code: ${code}`;
315
+ resultDiv.className = 'mt-2 text-sm text-green-600 font-medium';
316
+ resultDiv.classList.remove('hidden');
317
+
318
+ // Mark the QR code as checked in
319
+ const qrContainers = document.querySelectorAll('#qrCodesContainer > div');
320
+ qrContainers.forEach(container => {
321
+ const codeText = container.querySelector('p.font-mono').textContent;
322
+ if (codeText === code) {
323
+ container.classList.add('checked-in');
324
+ }
325
+ });
326
+
327
+ // Clear input
328
+ input.value = '';
329
+ } else {
330
+ resultDiv.textContent = 'Invalid attendee code. Please try again.';
331
+ resultDiv.className = 'mt-2 text-sm text-red-600';
332
+ resultDiv.classList.remove('hidden');
333
+ }
334
+ }
335
+
336
+ // Create confetti effect
337
+ function createConfetti() {
338
+ const colors = ['#f44336', '#e91e63', '#9c27b0', '#673ab7', '#3f51b5', '#2196f3', '#03a9f4', '#00bcd4', '#009688', '#4CAF50', '#8BC34A', '#CDDC39', '#FFEB3B', '#FFC107', '#FF9800', '#FF5722'];
339
+
340
+ for (let i = 0; i < 100; i++) {
341
+ const confetti = document.createElement('div');
342
+ confetti.className = 'confetti';
343
+ confetti.style.left = Math.random() * 100 + 'vw';
344
+ confetti.style.backgroundColor = colors[Math.floor(Math.random() * colors.length)];
345
+ confetti.style.width = Math.random() * 8 + 5 + 'px';
346
+ confetti.style.height = Math.random() * 8 + 5 + 'px';
347
+ confetti.style.animationDuration = Math.random() * 3 + 2 + 's';
348
+ confetti.style.animationDelay = Math.random() * 5 + 's';
349
+ document.body.appendChild(confetti);
350
+
351
+ // Remove confetti after animation
352
+ setTimeout(() => {
353
+ confetti.remove();
354
+ }, 5000);
355
+ }
356
+ }
357
+ </script>
358
+ <p style="border-radius: 8px; text-align: center; font-size: 12px; color: #fff; margin-top: 16px;position: fixed; left: 8px; bottom: 8px; z-index: 10; background: rgba(0, 0, 0, 0.8); padding: 4px 8px;">Made with <img src="https://enzostvs-deepsite.hf.space/logo.svg" alt="DeepSite Logo" style="width: 16px; height: 16px; vertical-align: middle;display:inline-block;margin-right:3px;filter:brightness(0) invert(1);"><a href="https://enzostvs-deepsite.hf.space" style="color: #fff;text-decoration: underline;" target="_blank" >DeepSite</a> - 🧬 <a href="https://enzostvs-deepsite.hf.space?remix=privateuserh/chandelier-events-booking" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body>
359
+ </html>
prompts.txt ADDED
@@ -0,0 +1 @@
 
 
1
+ In the Booking Confirmed! Window display a unique booking id and save it for the unique user also add an optional attendance window for a user to confirm their attendance with a unique id from the performance artist that booked the show allow the Booker to grab a unique id to assign to attendees and confirm on the site instantly for attendance allow the unique id to be saved for each unique user separately