jblast94 commited on
Commit
beafd9b
·
verified ·
1 Parent(s): 52720fb

Add 3 files

Browse files
Files changed (3) hide show
  1. README.md +6 -4
  2. index.html +639 -19
  3. prompts.txt +0 -0
README.md CHANGED
@@ -1,10 +1,12 @@
1
  ---
2
- title: Site Builder
3
- emoji: 📉
4
  colorFrom: pink
5
- colorTo: blue
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: site-builder
3
+ emoji: 🐳
4
  colorFrom: pink
5
+ colorTo: pink
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,639 @@
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>What I Can Do For You</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
+ :root {
11
+ --primary: #4361ee;
12
+ --secondary: #3f37c9;
13
+ --accent: #4895ef;
14
+ --light: #f8f9fa;
15
+ --dark: #212529;
16
+ --success: #4cc9f0;
17
+ --warning: #f72585;
18
+ }
19
+
20
+ * {
21
+ margin: 0;
22
+ padding: 0;
23
+ box-sizing: border-box;
24
+ font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
25
+ }
26
+
27
+ body {
28
+ background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
29
+ min-height: 100vh;
30
+ display: flex;
31
+ flex-direction: column;
32
+ align-items: center;
33
+ padding: 2rem;
34
+ color: var(--dark);
35
+ }
36
+
37
+ header {
38
+ text-align: center;
39
+ margin-bottom: 3rem;
40
+ animation: fadeIn 1s ease;
41
+ }
42
+
43
+ h1 {
44
+ font-size: 2.5rem;
45
+ margin-bottom: 1rem;
46
+ color: var(--secondary);
47
+ position: relative;
48
+ display: inline-block;
49
+ }
50
+
51
+ h1::after {
52
+ content: '';
53
+ position: absolute;
54
+ bottom: -10px;
55
+ left: 50%;
56
+ transform: translateX(-50%);
57
+ width: 50%;
58
+ height: 4px;
59
+ background: var(--warning);
60
+ border-radius: 2px;
61
+ }
62
+
63
+ .subtitle {
64
+ font-size: 1.2rem;
65
+ color: var(--dark);
66
+ max-width: 700px;
67
+ margin: 0 auto;
68
+ line-height: 1.6;
69
+ }
70
+
71
+ .cards-container {
72
+ display: grid;
73
+ grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
74
+ gap: 2rem;
75
+ width: 100%;
76
+ max-width: 1200px;
77
+ }
78
+
79
+ .card {
80
+ perspective: 1000px;
81
+ height: 400px;
82
+ }
83
+
84
+ .card-inner {
85
+ position: relative;
86
+ width: 100%;
87
+ height: 100%;
88
+ transition: transform 0.8s;
89
+ transform-style: preserve-3d;
90
+ box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1);
91
+ border-radius: 15px;
92
+ cursor: pointer;
93
+ }
94
+
95
+ .card:hover .card-inner {
96
+ transform: rotateY(180deg);
97
+ }
98
+
99
+ .card-front, .card-back {
100
+ position: absolute;
101
+ width: 100%;
102
+ height: 100%;
103
+ backface-visibility: hidden;
104
+ border-radius: 15px;
105
+ display: flex;
106
+ flex-direction: column;
107
+ align-items: center;
108
+ justify-content: center;
109
+ padding: 2rem;
110
+ text-align: center;
111
+ }
112
+
113
+ .card-front {
114
+ background: white;
115
+ color: var(--dark);
116
+ }
117
+
118
+ .card-back {
119
+ background: linear-gradient(135deg, var(--primary) 0%, var(--secondary) 100%);
120
+ color: white;
121
+ transform: rotateY(180deg);
122
+ }
123
+
124
+ .icon {
125
+ font-size: 3rem;
126
+ margin-bottom: 1.5rem;
127
+ color: var(--primary);
128
+ }
129
+
130
+ .card-back .icon {
131
+ color: white;
132
+ }
133
+
134
+ .card-title {
135
+ font-size: 1.5rem;
136
+ margin-bottom: 1rem;
137
+ font-weight: 600;
138
+ }
139
+
140
+ .card-desc {
141
+ font-size: 1rem;
142
+ line-height: 1.6;
143
+ color: #666;
144
+ }
145
+
146
+ .card-back .card-desc {
147
+ color: rgba(255, 255, 255, 0.9);
148
+ }
149
+
150
+ .card:nth-child(1) .card-front {
151
+ background: linear-gradient(135deg, #ff9a9e 0%, #fad0c4 100%);
152
+ }
153
+
154
+ .card:nth-child(2) .card-front {
155
+ background: linear-gradient(135deg, #a1c4fd 0%, #c2e9fb 100%);
156
+ }
157
+
158
+ .card:nth-child(3) .card-front {
159
+ background: linear-gradient(135deg, #ffecd2 0%, #fcb69f 100%);
160
+ }
161
+
162
+ .card:nth-child(4) .card-front {
163
+ background: linear-gradient(135deg, #84fab0 0%, #8fd3f4 100%);
164
+ }
165
+
166
+ .card:nth-child(5) .card-front {
167
+ background: linear-gradient(135deg, #a6c1ee 0%, #fbc2eb 100%);
168
+ }
169
+
170
+ .card:nth-child(6) .card-front {
171
+ background: linear-gradient(135deg, #fdcbf1 0%, #e6dee9 100%);
172
+ }
173
+
174
+ @keyframes fadeIn {
175
+ from { opacity: 0; transform: translateY(-20px); }
176
+ to { opacity: 1; transform: translateY(0); }
177
+ }
178
+
179
+ /* Modal Styles */
180
+ .modal {
181
+ display: none;
182
+ position: fixed;
183
+ top: 0;
184
+ left: 0;
185
+ width: 100%;
186
+ height: 100%;
187
+ background-color: rgba(0, 0, 0, 0.5);
188
+ z-index: 1000;
189
+ justify-content: center;
190
+ align-items: center;
191
+ }
192
+
193
+ .modal-content {
194
+ background-color: white;
195
+ padding: 2rem;
196
+ border-radius: 10px;
197
+ width: 90%;
198
+ max-width: 500px;
199
+ box-shadow: 0 5px 15px rgba(0, 0, 0, 0.3);
200
+ animation: modalFadeIn 0.3s ease;
201
+ }
202
+
203
+ @keyframes modalFadeIn {
204
+ from { opacity: 0; transform: translateY(-20px); }
205
+ to { opacity: 1; transform: translateY(0); }
206
+ }
207
+
208
+ .form-group {
209
+ margin-bottom: 1.5rem;
210
+ }
211
+
212
+ .form-group label {
213
+ display: block;
214
+ margin-bottom: 0.5rem;
215
+ font-weight: 600;
216
+ }
217
+
218
+ .form-group input,
219
+ .form-group textarea,
220
+ .form-group select {
221
+ width: 100%;
222
+ padding: 0.75rem;
223
+ border: 1px solid #ddd;
224
+ border-radius: 5px;
225
+ font-size: 1rem;
226
+ }
227
+
228
+ .form-group textarea {
229
+ min-height: 120px;
230
+ }
231
+
232
+ .btn {
233
+ display: inline-block;
234
+ padding: 0.75rem 1.5rem;
235
+ background-color: var(--primary);
236
+ color: white;
237
+ border: none;
238
+ border-radius: 5px;
239
+ cursor: pointer;
240
+ font-size: 1rem;
241
+ transition: background-color 0.3s;
242
+ }
243
+
244
+ .btn:hover {
245
+ background-color: var(--secondary);
246
+ }
247
+
248
+ .btn-warning {
249
+ background-color: var(--warning);
250
+ }
251
+
252
+ .btn-warning:hover {
253
+ background-color: #d61f6e;
254
+ }
255
+
256
+ .close-btn {
257
+ position: absolute;
258
+ top: 1rem;
259
+ right: 1rem;
260
+ font-size: 1.5rem;
261
+ cursor: pointer;
262
+ color: #666;
263
+ }
264
+
265
+ .toast {
266
+ position: fixed;
267
+ bottom: 2rem;
268
+ left: 50%;
269
+ transform: translateX(-50%);
270
+ background-color: var(--success);
271
+ color: white;
272
+ padding: 1rem 2rem;
273
+ border-radius: 5px;
274
+ box-shadow: 0 3px 10px rgba(0, 0, 0, 0.2);
275
+ display: none;
276
+ z-index: 1001;
277
+ }
278
+
279
+ .loading {
280
+ display: inline-block;
281
+ width: 20px;
282
+ height: 20px;
283
+ border: 3px solid rgba(255,255,255,.3);
284
+ border-radius: 50%;
285
+ border-top-color: white;
286
+ animation: spin 1s ease-in-out infinite;
287
+ }
288
+
289
+ @keyframes spin {
290
+ to { transform: rotate(360deg); }
291
+ }
292
+
293
+ @media (max-width: 768px) {
294
+ .cards-container {
295
+ grid-template-columns: 1fr;
296
+ }
297
+
298
+ h1 {
299
+ font-size: 2rem;
300
+ }
301
+
302
+ .subtitle {
303
+ font-size: 1rem;
304
+ }
305
+ }
306
+
307
+ .floating-btn {
308
+ position: fixed;
309
+ bottom: 2rem;
310
+ right: 2rem;
311
+ width: 60px;
312
+ height: 60px;
313
+ background: var(--warning);
314
+ color: white;
315
+ border-radius: 50%;
316
+ display: flex;
317
+ align-items: center;
318
+ justify-content: center;
319
+ font-size: 1.5rem;
320
+ box-shadow: 0 5px 20px rgba(247, 37, 133, 0.4);
321
+ cursor: pointer;
322
+ transition: all 0.3s;
323
+ z-index: 100;
324
+ }
325
+
326
+ .floating-btn:hover {
327
+ transform: scale(1.1);
328
+ box-shadow: 0 8px 25px rgba(247, 37, 133, 0.6);
329
+ }
330
+ </style>
331
+ </head>
332
+ <body>
333
+ <header>
334
+ <h1>What I Can Do For You</h1>
335
+ <p class="subtitle">
336
+ I specialize in creating beautiful, functional, and responsive web interfaces using only HTML, CSS, and JavaScript.
337
+ Here's a showcase of my capabilities - hover over each card to discover more!
338
+ </p>
339
+ </header>
340
+
341
+ <div class="cards-container" id="services-container">
342
+ <!-- Services will be loaded dynamically from the backend -->
343
+ </div>
344
+
345
+ <!-- Contact Modal -->
346
+ <div class="modal" id="contactModal">
347
+ <div class="modal-content relative">
348
+ <span class="close-btn" id="closeModal">&times;</span>
349
+ <h2 class="text-2xl font-bold mb-4">Get In Touch</h2>
350
+ <form id="contactForm">
351
+ <div class="form-group">
352
+ <label for="name">Your Name</label>
353
+ <input type="text" id="name" name="name" required>
354
+ </div>
355
+ <div class="form-group">
356
+ <label for="email">Email Address</label>
357
+ <input type="email" id="email" name="email" required>
358
+ </div>
359
+ <div class="form-group">
360
+ <label for="service">Service Interested In</label>
361
+ <select id="service" name="service">
362
+ <option value="">Select a service</option>
363
+ <!-- Options will be populated dynamically -->
364
+ </select>
365
+ </div>
366
+ <div class="form-group">
367
+ <label for="message">Your Message</label>
368
+ <textarea id="message" name="message" required></textarea>
369
+ </div>
370
+ <button type="submit" class="btn" id="submitBtn">
371
+ <span id="btnText">Send Message</span>
372
+ <span class="loading hidden"></span>
373
+ </button>
374
+ </form>
375
+ </div>
376
+ </div>
377
+
378
+ <!-- Toast Notification -->
379
+ <div class="toast" id="toast"></div>
380
+
381
+ <div class="floating-btn" id="contactBtn">
382
+ <i class="fas fa-rocket"></i>
383
+ </div>
384
+
385
+ <script>
386
+ // API Endpoints (Replace with your actual backend URLs)
387
+ const API = {
388
+ services: 'https://api.example.com/services', // Mock endpoint
389
+ contact: 'https://api.example.com/contact' // Mock endpoint
390
+ };
391
+
392
+ // DOM Elements
393
+ const servicesContainer = document.getElementById('services-container');
394
+ const contactModal = document.getElementById('contactModal');
395
+ const closeModal = document.getElementById('closeModal');
396
+ const contactBtn = document.getElementById('contactBtn');
397
+ const contactForm = document.getElementById('contactForm');
398
+ const serviceSelect = document.getElementById('service');
399
+ const submitBtn = document.getElementById('submitBtn');
400
+ const btnText = document.getElementById('btnText');
401
+ const loadingSpinner = document.querySelector('.loading');
402
+ const toast = document.getElementById('toast');
403
+
404
+ // State
405
+ let services = [];
406
+
407
+ // Initialize the app
408
+ document.addEventListener('DOMContentLoaded', function() {
409
+ // Load services from backend
410
+ loadServices();
411
+
412
+ // Set up event listeners
413
+ contactBtn.addEventListener('click', openModal);
414
+ closeModal.addEventListener('click', closeModalFunc);
415
+ contactForm.addEventListener('submit', handleSubmit);
416
+
417
+ // Close modal when clicking outside
418
+ window.addEventListener('click', function(event) {
419
+ if (event.target === contactModal) {
420
+ closeModalFunc();
421
+ }
422
+ });
423
+ });
424
+
425
+ // Load services from backend
426
+ async function loadServices() {
427
+ try {
428
+ // Show loading state
429
+ servicesContainer.innerHTML = '<div class="col-span-full text-center py-8">Loading services...</div>';
430
+
431
+ // In a real app, you would fetch from your actual backend
432
+ // const response = await fetch(API.services);
433
+ // services = await response.json();
434
+
435
+ // Mock data for demonstration
436
+ services = [
437
+ {
438
+ id: 1,
439
+ title: "Responsive Web Design",
440
+ description: "Create websites that look perfect on any device",
441
+ icon: "fas fa-laptop-code",
442
+ backTitle: "Mobile-First Approach",
443
+ backDescription: "I build with mobile users in mind first, then scale up to larger screens using flexible grids, media queries, and responsive images.",
444
+ backIcon: "fas fa-mobile-alt",
445
+ color: "linear-gradient(135deg, #ff9a9e 0%, #fad0c4 100%)"
446
+ },
447
+ {
448
+ id: 2,
449
+ title: "UI/UX Design",
450
+ description: "Crafting intuitive and beautiful user interfaces",
451
+ icon: "fas fa-paint-brush",
452
+ backTitle: "User-Centered Design",
453
+ backDescription: "I focus on creating interfaces that are not just visually appealing but also intuitive and accessible to all users, with thoughtful information architecture and smooth interactions.",
454
+ backIcon: "fas fa-user-friends",
455
+ color: "linear-gradient(135deg, #a1c4fd 0%, #c2e9fb 100%)"
456
+ },
457
+ {
458
+ id: 3,
459
+ title: "Interactive Elements",
460
+ description: "Engaging animations and micro-interactions",
461
+ icon: "fas fa-bolt",
462
+ backTitle: "Dynamic Experiences",
463
+ backDescription: "From subtle hover effects to complex animations, I can bring your website to life with JavaScript and CSS animations that enhance user engagement without compromising performance.",
464
+ backIcon: "fas fa-magic",
465
+ color: "linear-gradient(135deg, #ffecd2 0%, #fcb69f 100%)"
466
+ },
467
+ {
468
+ id: 4,
469
+ title: "E-Commerce Features",
470
+ description: "Build online stores with cart functionality",
471
+ icon: "fas fa-shopping-cart",
472
+ backTitle: "Shopping Experiences",
473
+ backDescription: "I can implement product galleries, shopping carts, checkout flows, and inventory management systems using pure JavaScript, creating seamless shopping experiences.",
474
+ backIcon: "fas fa-credit-card",
475
+ color: "linear-gradient(135deg, #84fab0 0%, #8fd3f4 100%)"
476
+ },
477
+ {
478
+ id: 5,
479
+ title: "Data Visualization",
480
+ description: "Present data in beautiful, interactive charts",
481
+ icon: "fas fa-chart-line",
482
+ backTitle: "Interactive Charts",
483
+ backDescription: "Using JavaScript libraries or custom SVG solutions, I can create dynamic charts, graphs, and data visualizations that make complex information easily digestible and interactive.",
484
+ backIcon: "fas fa-chart-pie",
485
+ color: "linear-gradient(135deg, #a6c1ee 0%, #fbc2eb 100%)"
486
+ },
487
+ {
488
+ id: 6,
489
+ title: "Browser Games",
490
+ description: "Create fun, interactive games for the web",
491
+ icon: "fas fa-gamepad",
492
+ backTitle: "Interactive Games",
493
+ backDescription: "From simple puzzle games to more complex interactive experiences, I can build engaging browser-based games using HTML5 Canvas and JavaScript game loops.",
494
+ backIcon: "fas fa-dice",
495
+ color: "linear-gradient(135deg, #fdcbf1 0%, #e6dee9 100%)"
496
+ }
497
+ ];
498
+
499
+ // Render services
500
+ renderServices();
501
+
502
+ // Populate service dropdown in contact form
503
+ populateServiceDropdown();
504
+
505
+ } catch (error) {
506
+ console.error('Error loading services:', error);
507
+ servicesContainer.innerHTML = '<div class="col-span-full text-center py-8 text-red-500">Failed to load services. Please try again later.</div>';
508
+ }
509
+ }
510
+
511
+ // Render services to the DOM
512
+ function renderServices() {
513
+ servicesContainer.innerHTML = services.map(service => `
514
+ <div class="card">
515
+ <div class="card-inner">
516
+ <div class="card-front" style="background: ${service.color}">
517
+ <div class="icon">
518
+ <i class="${service.icon}"></i>
519
+ </div>
520
+ <h3 class="card-title">${service.title}</h3>
521
+ <p class="card-desc">${service.description}</p>
522
+ </div>
523
+ <div class="card-back">
524
+ <div class="icon">
525
+ <i class="${service.backIcon}"></i>
526
+ </div>
527
+ <h3 class="card-title">${service.backTitle}</h3>
528
+ <p class="card-desc">${service.backDescription}</p>
529
+ </div>
530
+ </div>
531
+ </div>
532
+ `).join('');
533
+
534
+ // Add click event for mobile users
535
+ document.querySelectorAll('.card').forEach(card => {
536
+ card.addEventListener('click', function() {
537
+ this.querySelector('.card-inner').classList.toggle('flipped');
538
+ });
539
+ });
540
+ }
541
+
542
+ // Populate service dropdown in contact form
543
+ function populateServiceDropdown() {
544
+ serviceSelect.innerHTML = `
545
+ <option value="">Select a service</option>
546
+ ${services.map(service => `
547
+ <option value="${service.id}">${service.title}</option>
548
+ `).join('')}
549
+ `;
550
+ }
551
+
552
+ // Open contact modal
553
+ function openModal() {
554
+ contactModal.style.display = 'flex';
555
+ document.body.style.overflow = 'hidden';
556
+ }
557
+
558
+ // Close contact modal
559
+ function closeModalFunc() {
560
+ contactModal.style.display = 'none';
561
+ document.body.style.overflow = 'auto';
562
+ }
563
+
564
+ // Handle form submission
565
+ async function handleSubmit(e) {
566
+ e.preventDefault();
567
+
568
+ // Get form data
569
+ const formData = {
570
+ name: document.getElementById('name').value,
571
+ email: document.getElementById('email').value,
572
+ service: document.getElementById('service').value,
573
+ message: document.getElementById('message').value
574
+ };
575
+
576
+ // Validate form
577
+ if (!formData.name || !formData.email || !formData.message) {
578
+ showToast('Please fill in all required fields', 'error');
579
+ return;
580
+ }
581
+
582
+ // Show loading state
583
+ btnText.textContent = 'Sending...';
584
+ loadingSpinner.classList.remove('hidden');
585
+ submitBtn.disabled = true;
586
+
587
+ try {
588
+ // In a real app, you would send to your actual backend
589
+ // const response = await fetch(API.contact, {
590
+ // method: 'POST',
591
+ // headers: {
592
+ // 'Content-Type': 'application/json',
593
+ // },
594
+ // body: JSON.stringify(formData)
595
+ // });
596
+
597
+ // const data = await response.json();
598
+
599
+ // Mock response for demonstration
600
+ await new Promise(resolve => setTimeout(resolve, 1500));
601
+ const data = { success: true, message: 'Message sent successfully!' };
602
+
603
+ if (data.success) {
604
+ showToast(data.message, 'success');
605
+ contactForm.reset();
606
+ closeModalFunc();
607
+ } else {
608
+ showToast(data.message || 'Failed to send message', 'error');
609
+ }
610
+ } catch (error) {
611
+ console.error('Error submitting form:', error);
612
+ showToast('An error occurred. Please try again.', 'error');
613
+ } finally {
614
+ // Reset button state
615
+ btnText.textContent = 'Send Message';
616
+ loadingSpinner.classList.add('hidden');
617
+ submitBtn.disabled = false;
618
+ }
619
+ }
620
+
621
+ // Show toast notification
622
+ function showToast(message, type = 'success') {
623
+ toast.textContent = message;
624
+ toast.style.backgroundColor = type === 'success' ? 'var(--success)' : 'var(--warning)';
625
+ toast.style.display = 'block';
626
+
627
+ setTimeout(() => {
628
+ toast.style.display = 'none';
629
+ }, 3000);
630
+ }
631
+
632
+ // Parallax effect on scroll
633
+ window.addEventListener('scroll', function() {
634
+ const scrollPosition = window.scrollY;
635
+ contactBtn.style.transform = `translateY(${scrollPosition * 0.1}px)`;
636
+ });
637
+ </script>
638
+ <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 <a href="https://enzostvs-deepsite.hf.space" style="color: #fff;" target="_blank" >DeepSite</a> <img src="https://enzostvs-deepsite.hf.space/logo.svg" alt="DeepSite Logo" style="width: 16px; height: 16px; vertical-align: middle;"></p><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=jblast94/site-builder" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body>
639
+ </html>
prompts.txt ADDED
File without changes