CosmickVisions commited on
Commit
a7dc203
·
verified ·
1 Parent(s): 29179b8

Update index.html

Browse files
Files changed (1) hide show
  1. index.html +188 -47
index.html CHANGED
@@ -3,56 +3,121 @@
3
  <head>
4
  <meta charset="UTF-8">
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <title>Video Gallery with React</title>
7
- <!-- CSS -->
8
  <style>
9
- body {
10
- font-family: Arial, sans-serif;
 
 
 
 
 
 
 
 
11
  margin: 0;
12
  padding: 0;
13
- background-color: #f4f4f4;
14
- color: var(--text-color);
 
 
 
 
15
  line-height: 1.6;
 
 
16
  }
17
 
18
- .video-background video {
19
  position: fixed;
20
  top: 0;
21
  left: 0;
22
  width: 100%;
23
  height: 100%;
24
- object-fit: cover;
25
- z-index: -1;
 
26
  }
27
 
28
- .gradient-overlay {
29
- position: fixed;
30
  top: 0;
31
  left: 0;
32
  width: 100%;
33
  height: 100%;
34
- background: linear-gradient(135deg, rgba(245, 247, 250, 0.8) 0%, rgba(228, 232, 240, 0.8) 50%);
35
- z-index: -1;
 
 
 
 
 
 
 
 
 
 
 
 
 
36
  }
37
 
38
  header {
39
  text-align: center;
40
- padding: 20px;
41
- background-color: #333;
42
- color: white;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
43
  }
44
 
45
  .filters button {
46
  margin: 5px;
47
  padding: 10px 20px;
48
- border: none;
49
- background-color: #555;
50
- color: white;
51
  cursor: pointer;
 
 
 
 
52
  }
53
 
54
  .filters button:hover {
55
- background-color: #777;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
56
  }
57
 
58
  .gallery {
@@ -60,33 +125,80 @@
60
  flex-wrap: wrap;
61
  justify-content: center;
62
  padding: 20px;
 
63
  }
64
 
65
  .video-card {
66
- margin: 10px;
67
  width: 300px;
68
- background-color: white;
69
- border-radius: 8px;
70
- box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
71
  overflow: hidden;
 
 
 
 
 
 
 
 
72
  }
73
 
74
  .video-card video {
75
  width: 100%;
76
  height: auto;
 
 
 
 
 
77
  }
78
 
79
  .video-card p {
80
- padding: 10px;
81
  text-align: center;
82
- margin: 0;
 
 
83
  }
84
 
85
  @media (max-width: 600px) {
86
  .video-card {
87
  width: 100%;
 
88
  }
89
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
90
  </style>
91
  </head>
92
  <body>
@@ -99,20 +211,38 @@
99
  </div>
100
  <div class="gradient-overlay"></div>
101
 
102
- <!-- Root div for React -->
 
 
 
103
  <div id="root"></div>
104
 
105
- <!-- CDN for React, ReactDOM, and Babel -->
106
  <script src="https://unpkg.com/react@18/umd/react.development.js"></script>
107
  <script src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script>
108
  <script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
109
 
110
- <!-- React App Script -->
111
  <script type="text/babel">
112
- const { useState } = React;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
113
 
114
  const App = () => {
115
- // Local video data
116
  const videos = [
117
  { src: 'videos/Insta-VID1 (1).mp4', tag: ['Gen AI', 'Pika', 'Ai Art'] },
118
  { src: 'videos/Insta-VID1 (3).mp4', tag: ['After Effects'] },
@@ -123,25 +253,37 @@
123
  { src: 'videos/Insta-VID1 (8).mp4', tag: ['After Effects'] },
124
  ];
125
 
126
- // State for filter
127
  const [filter, setFilter] = useState('all');
 
 
 
 
 
 
 
 
 
128
 
129
- // Filter videos based on tag
130
- const filteredVideos = filter === 'all'
131
- ? videos
132
- : videos.filter(video => video.tag.includes(filter));
133
 
134
  return (
135
- <div>
 
136
  <header>
137
- <h1>My Video Gallery</h1>
138
  <div className="filters">
139
- <button onClick={() => setFilter('all')}>All</button>
140
- <button onClick={() => setFilter('Gen AI')}>Gen AI</button>
141
- <button onClick={() => setFilter('Pika')}>Pika</button>
142
- <button onClick={() => setFilter('Ai Art')}>Ai Art</button>
143
- <button onClick={() => setFilter('After Effects')}>After Effects</button>
144
- <button onClick={() => setFilter('Twin Motion')}>Twin Motion</button>
 
 
 
 
 
 
145
  </div>
146
  </header>
147
  <main>
@@ -157,12 +299,11 @@
157
  ))}
158
  </div>
159
  </main>
160
- </div>
161
  );
162
  };
163
 
164
- // Render the React app
165
  ReactDOM.render(<App />, document.getElementById('root'));
166
  </script>
167
  </body>
168
- </html>
 
3
  <head>
4
  <meta charset="UTF-8">
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Calvin Allen-Crawford's Gen AI Video Gallery</title>
7
+ <link href="https://fonts.googleapis.com/css2?family=Orbitron:wght@400;700&family=Roboto:wght@300;400;700&display=swap" rel="stylesheet">
8
  <style>
9
+ :root {
10
+ --primary-color: #00ffff;
11
+ --secondary-color: #ff6bff;
12
+ --background-dark: #0a0a1a;
13
+ --text-color-light: #e0e0ff;
14
+ --card-background: rgba(15, 15, 40, 0.8);
15
+ }
16
+
17
+ * {
18
+ box-sizing: border-box;
19
  margin: 0;
20
  padding: 0;
21
+ }
22
+
23
+ body {
24
+ font-family: 'Roboto', sans-serif;
25
+ background-color: var(--background-dark);
26
+ color: var(--text-color-light);
27
  line-height: 1.6;
28
+ overflow-x: hidden;
29
+ perspective: 1000px;
30
  }
31
 
32
+ .space-background {
33
  position: fixed;
34
  top: 0;
35
  left: 0;
36
  width: 100%;
37
  height: 100%;
38
+ background: radial-gradient(ellipse at bottom, #1b2735 0%, #090a0f 100%);
39
+ z-index: -2;
40
+ overflow: hidden;
41
  }
42
 
43
+ .stars {
44
+ position: absolute;
45
  top: 0;
46
  left: 0;
47
  width: 100%;
48
  height: 100%;
49
+ transform: rotateZ(45deg);
50
+ }
51
+
52
+ .star {
53
+ position: absolute;
54
+ background-color: #fff;
55
+ width: 1px;
56
+ height: 1px;
57
+ border-radius: 50%;
58
+ animation: twinkle 2s infinite alternate;
59
+ }
60
+
61
+ @keyframes twinkle {
62
+ 0% { opacity: 0.2; }
63
+ 100% { opacity: 1; }
64
  }
65
 
66
  header {
67
  text-align: center;
68
+ padding: 30px 20px;
69
+ background: linear-gradient(135deg, rgba(0,0,0,0.6) 0%, rgba(15,15,40,0.8) 100%);
70
+ backdrop-filter: blur(10px);
71
+ box-shadow: 0 4px 6px rgba(0,0,0,0.5);
72
+ }
73
+
74
+ header h1 {
75
+ font-family: 'Orbitron', sans-serif;
76
+ font-size: 2.5rem;
77
+ background: linear-gradient(45deg, var(--primary-color), var(--secondary-color));
78
+ -webkit-background-clip: text;
79
+ -webkit-text-fill-color: transparent;
80
+ text-shadow: 0 0 10px rgba(0,255,255,0.5);
81
+ }
82
+
83
+ .filters {
84
+ display: flex;
85
+ justify-content: center;
86
+ flex-wrap: wrap;
87
+ margin-top: 20px;
88
  }
89
 
90
  .filters button {
91
  margin: 5px;
92
  padding: 10px 20px;
93
+ border: 2px solid var(--primary-color);
94
+ background-color: transparent;
95
+ color: var(--primary-color);
96
  cursor: pointer;
97
+ font-family: 'Orbitron', sans-serif;
98
+ transition: all 0.3s ease;
99
+ position: relative;
100
+ overflow: hidden;
101
  }
102
 
103
  .filters button:hover {
104
+ background-color: rgba(0,255,255,0.2);
105
+ box-shadow: 0 0 15px rgba(0,255,255,0.5);
106
+ }
107
+
108
+ .filters button::before {
109
+ content: '';
110
+ position: absolute;
111
+ top: 0;
112
+ left: -100%;
113
+ width: 100%;
114
+ height: 100%;
115
+ background: linear-gradient(120deg, transparent, rgba(255,255,255,0.3), transparent);
116
+ transition: all 0.5s ease;
117
+ }
118
+
119
+ .filters button:hover::before {
120
+ left: 100%;
121
  }
122
 
123
  .gallery {
 
125
  flex-wrap: wrap;
126
  justify-content: center;
127
  padding: 20px;
128
+ perspective: 1000px;
129
  }
130
 
131
  .video-card {
132
+ margin: 15px;
133
  width: 300px;
134
+ background-color: var(--card-background);
135
+ border-radius: 15px;
136
+ box-shadow: 0 10px 25px rgba(0,0,0,0.5);
137
  overflow: hidden;
138
+ transition: all 0.3s ease;
139
+ transform: rotateX(10deg);
140
+ border: 2px solid rgba(0,255,255,0.2);
141
+ }
142
+
143
+ .video-card:hover {
144
+ transform: scale(1.05) rotateX(0);
145
+ box-shadow: 0 15px 35px rgba(0,255,255,0.3);
146
  }
147
 
148
  .video-card video {
149
  width: 100%;
150
  height: auto;
151
+ transition: transform 0.3s ease;
152
+ }
153
+
154
+ .video-card:hover video {
155
+ transform: scale(1.1);
156
  }
157
 
158
  .video-card p {
159
+ padding: 15px;
160
  text-align: center;
161
+ color: var(--primary-color);
162
+ font-family: 'Orbitron', sans-serif;
163
+ background: rgba(0,0,0,0.5);
164
  }
165
 
166
  @media (max-width: 600px) {
167
  .video-card {
168
  width: 100%;
169
+ margin: 10px 0;
170
  }
171
  }
172
+
173
+ .video-background {
174
+ position: fixed;
175
+ top: 0;
176
+ left: 0;
177
+ width: 100%;
178
+ height: 100%;
179
+ z-index: -3;
180
+ overflow: hidden;
181
+ }
182
+ .video-background video {
183
+ min-width: 100%;
184
+ min-height: 100%;
185
+ width: auto;
186
+ height: auto;
187
+ position: absolute;
188
+ top: 50%;
189
+ left: 50%;
190
+ transform: translate(-50%, -50%);
191
+ object-fit: cover;
192
+ }
193
+ .gradient-overlay {
194
+ position: fixed;
195
+ top: 0;
196
+ left: 0;
197
+ width: 100%;
198
+ height: 100%;
199
+ background: linear-gradient(135deg, rgba(0,0,0,0.6) 0%, rgba(15,15,40,0.8) 100%);
200
+ z-index: -2;
201
+ }
202
  </style>
203
  </head>
204
  <body>
 
211
  </div>
212
  <div class="gradient-overlay"></div>
213
 
214
+ <div class="space-background">
215
+ <div class="stars"></div>
216
+ </div>
217
+
218
  <div id="root"></div>
219
 
 
220
  <script src="https://unpkg.com/react@18/umd/react.development.js"></script>
221
  <script src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script>
222
  <script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
223
 
 
224
  <script type="text/babel">
225
+ const { useState, useEffect } = React;
226
+
227
+ const StarBackground = () => {
228
+ useEffect(() => {
229
+ const starsContainer = document.querySelector('.stars');
230
+ const starCount = 200;
231
+
232
+ for (let i = 0; i < starCount; i++) {
233
+ const star = document.createElement('div');
234
+ star.classList.add('star');
235
+ star.style.left = `${Math.random() * 100}%`;
236
+ star.style.top = `${Math.random() * 100}%`;
237
+ star.style.animationDelay = `${Math.random() * 2}s`;
238
+ starsContainer.appendChild(star);
239
+ }
240
+ }, []);
241
+
242
+ return null;
243
+ };
244
 
245
  const App = () => {
 
246
  const videos = [
247
  { src: 'videos/Insta-VID1 (1).mp4', tag: ['Gen AI', 'Pika', 'Ai Art'] },
248
  { src: 'videos/Insta-VID1 (3).mp4', tag: ['After Effects'] },
 
253
  { src: 'videos/Insta-VID1 (8).mp4', tag: ['After Effects'] },
254
  ];
255
 
 
256
  const [filter, setFilter] = useState('all');
257
+ const [filteredVideos, setFilteredVideos] = useState(videos);
258
+
259
+ useEffect(() => {
260
+ setFilteredVideos(
261
+ filter === 'all'
262
+ ? videos
263
+ : videos.filter(video => video.tag.includes(filter))
264
+ );
265
+ }, [filter]);
266
 
267
+ const uniqueTags = ['all', ...new Set(videos.flatMap(v => v.tag))];
 
 
 
268
 
269
  return (
270
+ <>
271
+ <StarBackground />
272
  <header>
273
+ <h1>Calvin Allen-Crawford's Gen AI Gallery</h1>
274
  <div className="filters">
275
+ {uniqueTags.map(tag => (
276
+ <button
277
+ key={tag}
278
+ onClick={() => setFilter(tag)}
279
+ style={{
280
+ fontWeight: filter === tag ? 'bold' : 'normal',
281
+ backgroundColor: filter === tag ? 'rgba(0,255,255,0.2)' : 'transparent'
282
+ }}
283
+ >
284
+ {tag}
285
+ </button>
286
+ ))}
287
  </div>
288
  </header>
289
  <main>
 
299
  ))}
300
  </div>
301
  </main>
302
+ </>
303
  );
304
  };
305
 
 
306
  ReactDOM.render(<App />, document.getElementById('root'));
307
  </script>
308
  </body>
309
+ </html>