j1225d commited on
Commit
af40898
·
verified ·
1 Parent(s): 09f2850

Can you make clicking the share button generate an awesome image the user can download and then share to their social media? - Initial Deployment

Browse files
Files changed (2) hide show
  1. README.md +7 -5
  2. index.html +326 -19
README.md CHANGED
@@ -1,10 +1,12 @@
1
  ---
2
- title: Workout Complete
3
- emoji:
4
- colorFrom: gray
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: workout-complete
3
+ emoji: 🐳
4
+ colorFrom: red
5
+ colorTo: gray
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,326 @@
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>Kintsugi Workout - Analytics</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
+ @keyframes fadeIn {
11
+ from { opacity: 0; transform: translateY(20px); }
12
+ to { opacity: 1; transform: translateY(0); }
13
+ }
14
+
15
+ @keyframes progressGrow {
16
+ from { width: 0; }
17
+ to { width: var(--progress-value); }
18
+ }
19
+
20
+ .modal-enter {
21
+ animation: fadeIn 0.3s ease-out forwards;
22
+ }
23
+
24
+ .progress-bar {
25
+ --progress-value: 0%;
26
+ animation: progressGrow 1s ease-out forwards;
27
+ }
28
+
29
+ .gold-text {
30
+ background: linear-gradient(to right, #d4af37, #f9d423);
31
+ -webkit-background-clip: text;
32
+ background-clip: text;
33
+ color: transparent;
34
+ }
35
+
36
+ .gold-border {
37
+ border-color: #d4af37;
38
+ }
39
+
40
+ .gold-bg {
41
+ background: linear-gradient(135deg, rgba(212, 175, 55, 0.1), rgba(249, 212, 35, 0.1));
42
+ }
43
+ </style>
44
+ </head>
45
+ <body class="bg-gray-900 min-h-screen flex items-center justify-center p-4">
46
+ <!-- Main Content (would be hidden when modal is not active) -->
47
+ <div class="text-white text-center">
48
+ <h1 class="text-4xl font-bold mb-4 gold-text">Kintsugi Workout</h1>
49
+ <p class="mb-8">Your fitness journey, beautifully imperfect</p>
50
+ <button id="openModalBtn" class="bg-amber-600 hover:bg-amber-700 text-white font-bold py-3 px-6 rounded-full transition-all duration-300 transform hover:scale-105">
51
+ View Workout Analytics
52
+ </button>
53
+ </div>
54
+
55
+ <!-- Hidden canvas for share image -->
56
+ <canvas id="shareCanvas" class="hidden"></canvas>
57
+
58
+ <!-- Workout Analytics Modal -->
59
+ <div id="workoutModal" class="fixed inset-0 bg-black bg-opacity-70 flex items-center justify-center p-4 hidden">
60
+ <div class="bg-gray-800 rounded-xl max-w-2xl w-full overflow-hidden shadow-2xl modal-enter">
61
+ <!-- Modal Header -->
62
+ <div class="gold-bg p-6 border-b gold-border">
63
+ <div class="flex justify-between items-center">
64
+ <h2 class="text-2xl font-bold gold-text">Workout Complete!</h2>
65
+ <button id="closeModalBtn" class="text-gray-400 hover:text-white">
66
+ <i class="fas fa-times text-xl"></i>
67
+ </button>
68
+ </div>
69
+ <p class="mt-2 text-amber-200">You're stronger than yesterday! <span class="text-white">Keep shining!</span></p>
70
+ </div>
71
+
72
+ <!-- Modal Body -->
73
+ <div class="p-6">
74
+ <!-- Summary Stats -->
75
+ <div class="grid grid-cols-2 md:grid-cols-4 gap-4 mb-8">
76
+ <div class="bg-gray-700 rounded-lg p-4 text-center">
77
+ <p class="text-gray-400 text-sm">Duration</p>
78
+ <p class="text-2xl font-bold gold-text">45:22</p>
79
+ <p class="text-xs text-amber-200">+2:18 from last time</p>
80
+ </div>
81
+ <div class="bg-gray-700 rounded-lg p-4 text-center">
82
+ <p class="text-gray-400 text-sm">Calories</p>
83
+ <p class="text-2xl font-bold gold-text">412</p>
84
+ <p class="text-xs text-amber-200">New record! 🔥</p>
85
+ </div>
86
+ <div class="bg-gray-700 rounded-lg p-4 text-center">
87
+ <p class="text-gray-400 text-sm">Exercises</p>
88
+ <p class="text-2xl font-bold gold-text">8</p>
89
+ <p class="text-xs text-amber-200">+1 new exercise</p>
90
+ </div>
91
+ <div class="bg-gray-700 rounded-lg p-4 text-center">
92
+ <p class="text-gray-400 text-sm">Intensity</p>
93
+ <div class="flex justify-center mt-1">
94
+ <i class="fas fa-fire text-amber-500 mx-1"></i>
95
+ <i class="fas fa-fire text-amber-500 mx-1"></i>
96
+ <i class="fas fa-fire text-amber-500 mx-1"></i>
97
+ <i class="fas fa-fire text-gray-600 mx-1"></i>
98
+ <i class="fas fa-fire text-gray-600 mx-1"></i>
99
+ </div>
100
+ <p class="text-xs text-amber-200 mt-1">Great effort!</p>
101
+ </div>
102
+ </div>
103
+
104
+ <!-- Progress Section -->
105
+ <div class="mb-8">
106
+ <h3 class="text-lg font-semibold mb-4 gold-text">Weekly Progress</h3>
107
+ <div class="bg-gray-700 rounded-lg p-4">
108
+ <div class="flex justify-between mb-2">
109
+ <span>Weekly Goal: 3/5 workouts</span>
110
+ <span>60%</span>
111
+ </div>
112
+ <div class="w-full bg-gray-600 rounded-full h-3">
113
+ <div class="progress-bar bg-amber-500 h-3 rounded-full" style="--progress-value: 60%"></div>
114
+ </div>
115
+ <p class="text-xs text-amber-200 mt-2">You're on track! 2 more workouts to hit your goal.</p>
116
+ </div>
117
+ </div>
118
+
119
+ <!-- Exercise Breakdown -->
120
+ <div class="mb-8">
121
+ <h3 class="text-lg font-semibold mb-4 gold-text">Exercise Breakdown</h3>
122
+ <div class="space-y-3">
123
+ <div class="flex items-center justify-between bg-gray-700 rounded-lg p-3">
124
+ <div class="flex items-center">
125
+ <div class="w-8 h-8 rounded-full gold-bg flex items-center justify-center mr-3">
126
+ <i class="fas fa-dumbbell text-amber-500"></i>
127
+ </div>
128
+ <div>
129
+ <p class="font-medium">Bench Press</p>
130
+ <p class="text-xs text-gray-400">3 sets × 10 reps</p>
131
+ </div>
132
+ </div>
133
+ <div class="text-right">
134
+ <p class="gold-text">+5 lbs</p>
135
+ <p class="text-xs text-amber-200">PR!</p>
136
+ </div>
137
+ </div>
138
+ <div class="flex items-center justify-between bg-gray-700 rounded-lg p-3">
139
+ <div class="flex items-center">
140
+ <div class="w-8 h-8 rounded-full gold-bg flex items-center justify-center mr-3">
141
+ <i class="fas fa-running text-amber-500"></i>
142
+ </div>
143
+ <div>
144
+ <p class="font-medium">Squats</p>
145
+ <p class="text-xs text-gray-400">4 sets × 8 reps</p>
146
+ </div>
147
+ </div>
148
+ <div class="text-right">
149
+ <p class="gold-text">135 lbs</p>
150
+ <p class="text-xs text-amber-200">Consistent</p>
151
+ </div>
152
+ </div>
153
+ <div class="flex items-center justify-between bg-gray-700 rounded-lg p-3">
154
+ <div class="flex items-center">
155
+ <div class="w-8 h-8 rounded-full gold-bg flex items-center justify-center mr-3">
156
+ <i class="fas fa-heartbeat text-amber-500"></i>
157
+ </div>
158
+ <div>
159
+ <p class="font-medium">HIIT</p>
160
+ <p class="text-xs text-gray-400">20 min</p>
161
+ </div>
162
+ </div>
163
+ <div class="text-right">
164
+ <p class="gold-text">+3 min</p>
165
+ <p class="text-xs text-amber-200">Longer duration</p>
166
+ </div>
167
+ </div>
168
+ </div>
169
+ </div>
170
+
171
+ <!-- Motivational Quote -->
172
+ <div class="gold-bg border-l-4 gold-border p-4 mb-6">
173
+ <p class="italic text-amber-100">"Strength doesn't come from what you can do. It comes from overcoming the things you once thought you couldn't."</p>
174
+ <p class="text-right text-sm mt-2 gold-text">- Rikki Rogers</p>
175
+ </div>
176
+
177
+ <!-- Action Buttons -->
178
+ <div class="flex flex-col sm:flex-row gap-3">
179
+ <button class="flex-1 bg-amber-600 hover:bg-amber-700 text-white font-bold py-3 px-4 rounded-lg transition-all flex items-center justify-center">
180
+ <i class="fas fa-trophy mr-2"></i> Save Progress
181
+ </button>
182
+ <button class="flex-1 bg-transparent hover:bg-gray-700 text-white font-bold py-3 px-4 rounded-lg border gold-border transition-all flex items-center justify-center">
183
+ <i class="fas fa-share-alt mr-2"></i> Share
184
+ </button>
185
+ <button class="flex-1 bg-transparent hover:bg-gray-700 text-white font-bold py-3 px-4 rounded-lg border gold-border transition-all flex items-center justify-center">
186
+ <i class="fas fa-chart-line mr-2"></i> View Trends
187
+ </button>
188
+ </div>
189
+ </div>
190
+
191
+ <!-- Modal Footer -->
192
+ <div class="gold-bg p-4 text-center border-t gold-border">
193
+ <p class="text-xs text-amber-200">Remember: Every workout makes you stronger. Your effort today is an investment in tomorrow.</p>
194
+ </div>
195
+ </div>
196
+ </div>
197
+
198
+ <script>
199
+ // Modal functionality
200
+ const openModalBtn = document.getElementById('openModalBtn');
201
+ const closeModalBtn = document.getElementById('closeModalBtn');
202
+ const workoutModal = document.getElementById('workoutModal');
203
+
204
+ openModalBtn.addEventListener('click', () => {
205
+ workoutModal.classList.remove('hidden');
206
+ document.body.style.overflow = 'hidden';
207
+ });
208
+
209
+ closeModalBtn.addEventListener('click', () => {
210
+ workoutModal.classList.add('hidden');
211
+ document.body.style.overflow = 'auto';
212
+ });
213
+
214
+ // Close modal when clicking outside
215
+ workoutModal.addEventListener('click', (e) => {
216
+ if (e.target === workoutModal) {
217
+ workoutModal.classList.add('hidden');
218
+ document.body.style.overflow = 'auto';
219
+ }
220
+ });
221
+
222
+ // Simulate loading some data (in a real app, this would be from your backend)
223
+ setTimeout(() => {
224
+ const progressBars = document.querySelectorAll('.progress-bar');
225
+ progressBars.forEach(bar => {
226
+ bar.style.width = bar.style.getPropertyValue('--progress-value');
227
+ });
228
+ }, 100);
229
+
230
+ // Share button functionality
231
+ document.querySelector('button:has(.fa-share-alt)').addEventListener('click', () => {
232
+ const canvas = document.getElementById('shareCanvas');
233
+ const ctx = canvas.getContext('2d');
234
+
235
+ // Set canvas size (optimized for social sharing)
236
+ canvas.width = 1080;
237
+ canvas.height = 1080;
238
+
239
+ // Draw gradient background
240
+ const gradient = ctx.createLinearGradient(0, 0, canvas.width, canvas.height);
241
+ gradient.addColorStop(0, '#1a1a2e');
242
+ gradient.addColorStop(1, '#16213e');
243
+ ctx.fillStyle = gradient;
244
+ ctx.fillRect(0, 0, canvas.width, canvas.height);
245
+
246
+ // Add gold decorative elements
247
+ ctx.fillStyle = 'rgba(212, 175, 55, 0.1)';
248
+ for (let i = 0; i < 5; i++) {
249
+ ctx.beginPath();
250
+ ctx.arc(
251
+ Math.random() * canvas.width,
252
+ Math.random() * canvas.height,
253
+ Math.random() * 100 + 50,
254
+ 0,
255
+ Math.PI * 2
256
+ );
257
+ ctx.fill();
258
+ }
259
+
260
+ // Add title with better typography
261
+ ctx.fillStyle = '#f9d423';
262
+ ctx.font = 'bold 72px "Arial", sans-serif';
263
+ ctx.textAlign = 'center';
264
+ ctx.textBaseline = 'middle';
265
+
266
+ // Main title
267
+ ctx.fillText('WORKOUT COMPLETE', canvas.width/2, 150);
268
+
269
+ // Stats container
270
+ ctx.fillStyle = 'rgba(255, 255, 255, 0.9)';
271
+ ctx.font = 'bold 42px "Arial", sans-serif';
272
+
273
+ // Stats with icons
274
+ const stats = [
275
+ { icon: '⏱️', text: 'Duration: 45:22 (+2:18)' },
276
+ { icon: '🔥', text: 'Calories: 412 (New Record!)' },
277
+ { icon: '💪', text: 'Exercises: 8 (+1 new)' },
278
+ { icon: '📈', text: 'Weekly Progress: 3/5 (60%)' }
279
+ ];
280
+
281
+ stats.forEach((stat, i) => {
282
+ const y = 300 + i * 100;
283
+ ctx.fillText(`${stat.icon} ${stat.text}`, canvas.width/2, y);
284
+ });
285
+
286
+ // Progress bar
287
+ ctx.fillStyle = 'rgba(255, 255, 255, 0.2)';
288
+ ctx.fillRect(canvas.width/2 - 200, 700, 400, 30);
289
+ ctx.fillStyle = '#f9d423';
290
+ ctx.fillRect(canvas.width/2 - 200, 700, 400 * 0.6, 30);
291
+
292
+ // Motivational quote
293
+ ctx.fillStyle = 'rgba(255, 255, 255, 0.7)';
294
+ ctx.font = 'italic 32px "Arial", sans-serif';
295
+ ctx.fillText('"Strength grows in the moments', canvas.width/2, 800);
296
+ ctx.fillText('when you think you can\'t go on"', canvas.width/2, 850);
297
+
298
+ // Logo and branding
299
+ ctx.fillStyle = '#f9d423';
300
+ ctx.font = 'bold 36px "Arial", sans-serif';
301
+ ctx.fillText('KINTSUGI FITNESS', canvas.width/2, 950);
302
+
303
+ ctx.fillStyle = 'rgba(255, 255, 255, 0.5)';
304
+ ctx.font = '24px "Arial", sans-serif';
305
+ ctx.fillText('Your journey, beautifully imperfect', canvas.width/2, 1000);
306
+
307
+ // Convert canvas to image and download
308
+ canvas.toBlob((blob) => {
309
+ const url = URL.createObjectURL(blob);
310
+ const link = document.createElement('a');
311
+ link.download = 'my-kintsugi-workout.png';
312
+ link.href = url;
313
+ document.body.appendChild(link);
314
+ link.click();
315
+ document.body.removeChild(link);
316
+ URL.revokeObjectURL(url);
317
+ }, 'image/png', 1);
318
+ });
319
+
320
+ // View trends button functionality
321
+ document.querySelector('button:has(.fa-chart-line)').addEventListener('click', () => {
322
+ alert('Trends feature coming soon! This would show your progress over time with interactive charts.');
323
+ });
324
+ </script>
325
+ <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=j1225d/workout-complete" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body>
326
+ </html>