flitrx commited on
Commit
9a61b83
·
verified ·
1 Parent(s): b2215ae

Add 2 files

Browse files
Files changed (2) hide show
  1. index.html +376 -272
  2. prompts.txt +3 -1
index.html CHANGED
@@ -3,7 +3,7 @@
3
  <head>
4
  <meta charset="UTF-8">
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <title>TechPulse - Real-time Technology News Aggregator</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
  <script>
@@ -11,121 +11,284 @@
11
  theme: {
12
  extend: {
13
  colors: {
14
- techDark: '#1e293b',
15
- techBlue: '#3b82f6',
16
- techGreen: '#10b981',
17
- techRed: '#ef4444',
18
- techPurple: '#8b5cf6',
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
19
  }
20
  }
21
  }
22
  }
23
  </script>
24
  <style>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
25
  .news-card:hover {
26
- transform: translateY(-5px);
27
- box-shadow: 0 10px 25px rgba(0, 0, 0, 0.2);
28
  }
29
- .tech-gradient-bg {
30
- background: linear-gradient(135deg, #1e293b 0%, #334155 100%);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
31
  }
32
- .pulse {
33
- animation: pulse 2s infinite;
 
34
  }
35
- @keyframes pulse {
36
- 0% { opacity: 1; }
37
- 50% { opacity: 0.5; }
38
- 100% { opacity: 1; }
 
 
39
  }
 
40
  .marquee {
41
  white-space: nowrap;
42
  overflow: hidden;
43
  box-sizing: border-box;
44
  }
 
45
  .marquee span {
46
  display: inline-block;
47
  padding-left: 100%;
48
- animation: marquee 20s linear infinite;
49
  }
 
50
  @keyframes marquee {
51
  0% { transform: translate(0, 0); }
52
  100% { transform: translate(-100%, 0); }
53
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
54
  </style>
55
  </head>
56
- <body class="bg-gray-100 text-gray-900">
 
 
 
 
 
57
  <!-- Header -->
58
- <header class="tech-gradient-bg text-white shadow-lg">
59
- <div class="container mx-auto px-4 py-6">
60
  <div class="flex flex-col md:flex-row justify-between items-center">
61
  <div class="flex items-center mb-4 md:mb-0">
62
- <i class="fas fa-microchip text-3xl text-techPurple mr-3"></i>
63
- <h1 class="text-2xl font-bold">Tech<span class="text-techBlue">Pulse</span></h1>
 
 
 
 
64
  </div>
65
- <div class="relative w-full md:w-1/3">
66
- <input type="text" placeholder="Search tech news..."
67
- class="w-full px-4 py-2 rounded-full bg-gray-800 text-white focus:outline-none focus:ring-2 focus:ring-techBlue">
68
- <button class="absolute right-3 top-2 text-gray-400 hover:text-white">
69
- <i class="fas fa-search"></i>
 
 
 
 
 
 
 
70
  </button>
71
  </div>
72
- <div class="hidden md:flex space-x-4 mt-4 md:mt-0">
73
- <button class="px-4 py-2 rounded-full bg-techBlue hover:bg-blue-600 transition">Sign In</button>
74
- <button class="px-4 py-2 rounded-full bg-techPurple hover:bg-purple-600 transition">Register</button>
75
- </div>
76
  </div>
77
  </div>
78
  </header>
79
 
80
- <!-- Tech Ticker -->
81
- <div class="bg-gray-800 text-white py-2 px-4 overflow-hidden">
82
- <div class="marquee">
83
- <span id="tech-ticker" class="text-sm">
84
- Loading technology news headlines...
85
- </span>
86
- </div>
87
- </div>
88
-
89
  <!-- Main Content -->
90
- <main class="container mx-auto px-4 py-8">
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
91
  <div class="flex flex-col lg:flex-row gap-8">
92
  <!-- Left Column - News Feed -->
93
  <div class="w-full lg:w-2/3">
94
- <div class="flex justify-between items-center mb-6">
95
- <h2 class="text-2xl font-bold text-techDark">Latest Tech News</h2>
96
- <div class="flex space-x-2">
97
- <button id="refresh-btn" class="px-3 py-1 bg-techBlue text-white rounded hover:bg-blue-600 transition">
98
- <i class="fas fa-sync-alt mr-1"></i> Refresh
99
- </button>
100
- <select id="news-category" class="px-3 py-1 bg-gray-200 rounded focus:outline-none">
101
- <option value="all">All Categories</option>
102
- <option value="technology">Technology</option>
103
- <option value="energy">Energy</option>
104
- <option value="communication">Communication Services</option>
105
- <option value="financial">Financial</option>
106
- <option value="healthcare">Healthcare</option>
107
- <option value="industrial">Industrial</option>
108
- <option value="real_estate">Real Estate</option>
109
- <option value="utilities">Utilities</option>
110
- </select>
111
- </div>
112
  </div>
113
 
114
  <!-- News Loading Skeleton -->
115
  <div id="loading-skeleton" class="space-y-6">
116
- <div class="bg-white rounded-lg shadow-md p-6 animate-pulse">
117
- <div class="h-4 bg-gray-300 rounded w-3/4 mb-4"></div>
118
- <div class="h-3 bg-gray-200 rounded w-full mb-2"></div>
119
- <div class="h-3 bg-gray-200 rounded w-5/6 mb-2"></div>
120
- <div class="h-3 bg-gray-200 rounded w-4/6 mb-4"></div>
121
- <div class="h-2 bg-gray-200 rounded w-1/4"></div>
122
  </div>
123
- <div class="bg-white rounded-lg shadow-md p-6 animate-pulse">
124
- <div class="h-4 bg-gray-300 rounded w-3/4 mb-4"></div>
125
- <div class="h-3 bg-gray-200 rounded w-full mb-2"></div>
126
- <div class="h-3 bg-gray-200 rounded w-5/6 mb-2"></div>
127
- <div class="h-3 bg-gray-200 rounded w-4/6 mb-4"></div>
128
- <div class="h-2 bg-gray-200 rounded w-1/4"></div>
129
  </div>
130
  </div>
131
 
@@ -135,71 +298,90 @@
135
  </div>
136
 
137
  <div class="mt-8 flex justify-center">
138
- <button id="load-more" class="px-6 py-2 bg-techPurple text-white rounded-full hover:bg-purple-600 transition">
139
- Load More News
140
  </button>
141
  </div>
142
  </div>
143
 
144
- <!-- Right Column - Trending & Companies -->
145
  <div class="w-full lg:w-1/3">
146
- <!-- Trending Topics -->
147
- <div class="bg-white rounded-lg shadow-md p-6 mb-6">
148
- <h3 class="text-xl font-bold text-techDark mb-4">Trending Topics</h3>
 
 
149
  <div class="space-y-4" id="trending-topics">
150
  <div class="flex justify-between items-center animate-pulse">
151
  <div class="flex items-center">
152
- <div class="w-8 h-8 bg-gray-300 rounded-full mr-2"></div>
153
- <div class="h-4 bg-gray-200 rounded w-16"></div>
154
- </div>
155
- <div class="text-right">
156
- <div class="h-4 bg-gray-200 rounded w-12"></div>
157
  </div>
 
158
  </div>
159
  <div class="flex justify-between items-center animate-pulse">
160
  <div class="flex items-center">
161
- <div class="w-8 h-8 bg-gray-300 rounded-full mr-2"></div>
162
- <div class="h-4 bg-gray-200 rounded w-16"></div>
163
- </div>
164
- <div class="text-right">
165
- <div class="h-4 bg-gray-200 rounded w-12"></div>
166
  </div>
 
167
  </div>
168
  </div>
169
  </div>
170
 
171
- <!-- Tech Companies -->
172
- <div class="bg-white rounded-lg shadow-md p-6 mb-6">
173
- <h3 class="text-xl font-bold text-techDark mb-4">Tech Giants</h3>
174
- <div class="grid grid-cols-2 gap-4" id="tech-companies">
175
- <div class="flex items-center p-3 bg-gray-50 rounded-lg animate-pulse">
176
- <div class="w-10 h-10 bg-gray-300 rounded-full mr-3"></div>
177
- <div class="h-4 bg-gray-200 rounded w-16"></div>
178
- </div>
179
- <div class="flex items-center p-3 bg-gray-50 rounded-lg animate-pulse">
180
- <div class="w-10 h-10 bg-gray-300 rounded-full mr-3"></div>
181
- <div class="h-4 bg-gray-200 rounded w-16"></div>
 
 
 
 
 
182
  </div>
183
- <div class="flex items-center p-3 bg-gray-50 rounded-lg animate-pulse">
184
- <div class="w-10 h-10 bg-gray-300 rounded-full mr-3"></div>
185
- <div class="h-4 bg-gray-200 rounded w-16"></div>
 
 
 
 
 
 
 
186
  </div>
187
- <div class="flex items-center p-3 bg-gray-50 rounded-lg animate-pulse">
188
- <div class="w-10 h-10 bg-gray-300 rounded-full mr-3"></div>
189
- <div class="h-4 bg-gray-200 rounded w-16"></div>
 
 
 
 
 
 
 
190
  </div>
191
  </div>
192
  </div>
193
 
194
  <!-- Newsletter -->
195
- <div class="bg-techPurple text-white rounded-lg shadow-md p-6">
196
- <h3 class="text-xl font-bold mb-2">Stay Updated</h3>
197
- <p class="mb-4 opacity-90">Get the latest tech news delivered to your inbox daily.</p>
 
 
198
  <form class="space-y-3">
199
- <input type="email" placeholder="Your email address"
200
- class="w-full px-4 py-2 rounded bg-purple-700 text-white placeholder-purple-300 focus:outline-none focus:ring-2 focus:ring-white">
201
- <button type="submit" class="w-full px-4 py-2 bg-white text-techPurple rounded font-medium hover:bg-gray-100 transition">
202
- Subscribe
203
  </button>
204
  </form>
205
  </div>
@@ -208,40 +390,54 @@
208
  </main>
209
 
210
  <!-- Footer -->
211
- <footer class="tech-gradient-bg text-white py-8">
212
- <div class="container mx-auto px-4">
213
  <div class="grid grid-cols-1 md:grid-cols-4 gap-8">
214
  <div>
215
- <h4 class="text-lg font-bold mb-4">TechPulse</h4>
216
- <p class="text-gray-300">Your premier source for real-time technology news and industry insights.</p>
 
 
 
 
 
 
 
 
217
  </div>
218
  <div>
219
- <h4 class="text-lg font-bold mb-4">Quick Links</h4>
220
  <ul class="space-y-2">
221
- <li><a href="#" class="text-gray-300 hover:text-white transition">Home</a></li>
222
- <li><a href="#" class="text-gray-300 hover:text-white transition">News</a></li>
223
- <li><a href="#" class="text-gray-300 hover:text-white transition">Trending</li>
224
- <li><a href="#" class="text-gray-300 hover:text-white transition">About Us</a></li>
225
  </ul>
226
  </div>
227
  <div>
228
- <h4 class="text-lg font-bold mb-4">Resources</h4>
229
  <ul class="space-y-2">
230
- <li><a href="#" class="text-gray-300 hover:text-white transition">API</a></li>
231
- <li><a href="#" class="text-gray-300 hover:text-white transition">Developer Tools</a></li>
232
- <li><a href="#" class="text-gray-300 hover:text-white transition">Research</a></li>
233
- <li><a href="#" class="text-gray-300 hover:text-white transition">Glossary</a></li>
234
  </ul>
235
  </div>
236
  <div>
237
- <h4 class="text-lg font-bold mb-4">Connect</h4>
238
- <div class="flex space-x-4 mb-4">
239
- <a href="#" class="text-gray-300 hover:text-white transition"><i class="fab fa-twitter text-xl"></i></a>
240
- <a href="#" class="text-gray-300 hover:text-white transition"><i class="fab fa-linkedin text-xl"></i></a>
241
- <a href="#" class="text-gray-300 hover:text-white transition"><i class="fab fa-github text-xl"></i></a>
242
- <a href="#" class="text-gray-300 hover:text-white transition"><i class="fab fa-youtube text-xl"></i></a>
243
- </div>
244
- <p class="text-gray-300 text-sm">© 2023 TechPulse. All rights reserved.</p>
 
 
 
 
 
 
245
  </div>
246
  </div>
247
  </div>
@@ -252,14 +448,17 @@
252
  const NEWSAPI_API_KEY = 'f764fe522436442d9bdafbae241d7b63';
253
  const MARKETAUX_API_TOKEN = 'x7do5W51vWCggI5OC0qDPYYPRRRBdpsZuydOkfPq';
254
 
255
-
256
  // API endpoints for each category
257
  const API_ENDPOINTS = {
258
  all: [
259
  'https://api.marketaux.com/v1/news/all?industries=Technology&filter_entities=true&limit=10&api_token=' + MARKETAUX_API_TOKEN,
260
  'https://newsapi.org/v2/everything?q=bitcoin&from=2025-04-23&sortBy=publishedAt&apiKey=' + NEWSAPI_API_KEY,
261
  'https://newsapi.org/v2/everything?q=apple&from=2025-05-22&to=2025-05-22&sortBy=popularity&apiKey=' + NEWSAPI_API_KEY,
262
- 'https://newsapi.org/v2/top-headlines?sources=techcrunch&apiKey=' + NEWSAPI_API_KEY
 
 
 
 
263
  ],
264
  technology: [
265
  'https://newsapi.org/v2/everything?q=technology&from=2025-04-23&sortBy=publishedAt&apiKey=' + NEWSAPI_API_KEY,
@@ -304,52 +503,25 @@
304
  loadAllData();
305
 
306
  // Event listeners
307
- document.getElementById('refresh-btn').addEventListener('click', refreshAllData);
308
  document.getElementById('load-more').addEventListener('click', loadMoreNews);
309
- document.getElementById('news-category').addEventListener('change', function(e) {
310
- selectedCategory = e.target.value;
311
- refreshNews();
312
- });
313
  });
314
 
315
  async function loadAllData() {
316
  try {
317
  await Promise.all([
318
  fetchNews(),
319
- fetchTrendingTopics(),
320
- loadTechCompanies()
321
  ]);
322
  } catch (error) {
323
  console.error('Error loading data:', error);
324
- showError('Failed to load data. Please try again later.');
325
- }
326
- }
327
-
328
- async function refreshAllData() {
329
- // Show loading states
330
- document.getElementById('loading-skeleton').classList.remove('hidden');
331
- document.getElementById('news-container').classList.add('hidden');
332
- document.getElementById('tech-ticker').textContent = 'Refreshing data...';
333
-
334
- // Reset news page
335
- currentNewsPage = 1;
336
-
337
- try {
338
- await Promise.all([
339
- fetchNews(true), // true indicates refresh
340
- fetchTrendingTopics(),
341
- loadTechCompanies()
342
- ]);
343
- } catch (error) {
344
- console.error('Error refreshing data:', error);
345
- showError('Failed to refresh data. Please try again later.');
346
  }
347
  }
348
 
349
  async function loadMoreNews() {
350
  const btn = document.getElementById('load-more');
351
  const originalText = btn.innerHTML;
352
- btn.innerHTML = '<i class="fas fa-spinner fa-spin mr-1"></i> Loading...';
353
  btn.disabled = true;
354
 
355
  currentNewsPage++;
@@ -358,7 +530,7 @@
358
  await fetchNews(false, true); // false = not refresh, true = append
359
  } catch (error) {
360
  console.error('Error loading more news:', error);
361
- showError('Failed to load more news. Please try again later.');
362
  currentNewsPage--; // Revert page increment on failure
363
  }
364
 
@@ -366,21 +538,6 @@
366
  btn.disabled = false;
367
  }
368
 
369
- async function refreshNews() {
370
- document.getElementById('loading-skeleton').classList.remove('hidden');
371
- document.getElementById('news-container').classList.add('hidden');
372
- document.getElementById('news-container').innerHTML = '';
373
-
374
- currentNewsPage = 1;
375
-
376
- try {
377
- await fetchNews(true);
378
- } catch (error) {
379
- console.error('Error refreshing news:', error);
380
- showError('Failed to refresh news. Please try again later.');
381
- }
382
- }
383
-
384
  // API Fetch Functions
385
  async function fetchNews(refresh = false, append = false) {
386
  try {
@@ -429,7 +586,6 @@
429
 
430
  if (allArticles.length > 0) {
431
  updateNewsUI(allArticles, refresh, append);
432
- updateTicker(allArticles);
433
  }
434
  } catch (error) {
435
  console.error('Error fetching news:', error);
@@ -450,13 +606,12 @@
450
  async function fetchTrendingTopics() {
451
  try {
452
  // For demo purposes, we'll use a static list
453
- // In a real app, you might have an API endpoint for trending topics
454
  const trendingTopics = [
455
- { name: "AI Advancements", mentions: 1245 },
456
- { name: "Quantum Computing", mentions: 876 },
457
- { name: "5G Rollout", mentions: 754 },
458
- { name: "Metaverse", mentions: 689 },
459
- { name: "Cybersecurity", mentions: 632 }
460
  ];
461
 
462
  updateTrendingTopicsUI(trendingTopics);
@@ -466,20 +621,6 @@
466
  }
467
  }
468
 
469
- function loadTechCompanies() {
470
- // Static list of major tech companies
471
- const techCompanies = [
472
- { name: "Apple", symbol: "AAPL", logo: "https://logo.clearbit.com/apple.com" },
473
- { name: "Microsoft", symbol: "MSFT", logo: "https://logo.clearbit.com/microsoft.com" },
474
- { name: "Google", symbol: "GOOGL", logo: "https://logo.clearbit.com/google.com" },
475
- { name: "Amazon", symbol: "AMZN", logo: "https://logo.clearbit.com/amazon.com" },
476
- { name: "Meta", symbol: "META", logo: "https://logo.clearbit.com/meta.com" },
477
- { name: "Tesla", symbol: "TSLA", logo: "https://logo.clearbit.com/tesla.com" }
478
- ];
479
-
480
- updateTechCompaniesUI(techCompanies);
481
- }
482
-
483
  // UI Update Functions
484
  function updateTrendingTopicsUI(topics) {
485
  const trendingContainer = document.getElementById('trending-topics');
@@ -491,13 +632,13 @@
491
 
492
  topicElement.innerHTML = `
493
  <div class="flex items-center">
494
- <div class="w-8 h-8 rounded-full bg-techPurple text-white flex items-center justify-center mr-2">
495
- <i class="fas fa-hashtag text-sm"></i>
496
  </div>
497
- <span>${topic.name}</span>
498
  </div>
499
  <div class="text-right">
500
- <span class="text-sm text-gray-500">${topic.mentions.toLocaleString()} mentions</span>
501
  </div>
502
  `;
503
 
@@ -505,26 +646,6 @@
505
  });
506
  }
507
 
508
- function updateTechCompaniesUI(companies) {
509
- const companiesContainer = document.getElementById('tech-companies');
510
- companiesContainer.innerHTML = '';
511
-
512
- companies.forEach(company => {
513
- const companyElement = document.createElement('div');
514
- companyElement.className = 'flex items-center p-3 bg-gray-50 rounded-lg hover:bg-gray-100 transition cursor-pointer';
515
-
516
- companyElement.innerHTML = `
517
- <img src="${company.logo}" alt="${company.name}" class="w-10 h-10 rounded-full mr-3" onerror="this.src='https://via.placeholder.com/40?text=${company.symbol}'">
518
- <div>
519
- <div class="font-medium">${company.name}</div>
520
- <div class="text-xs text-gray-500">${company.symbol}</div>
521
- </div>
522
- `;
523
-
524
- companiesContainer.appendChild(companyElement);
525
- });
526
- }
527
-
528
  function updateNewsUI(articles, refresh, append) {
529
  const newsContainer = document.getElementById('news-container');
530
 
@@ -544,21 +665,21 @@
544
  // Add articles to container
545
  articles.forEach(article => {
546
  const newsCard = document.createElement('div');
547
- newsCard.className = 'news-card bg-white rounded-lg shadow-md p-6 transition duration-300';
548
 
549
  // Simple sentiment analysis based on title keywords
550
- let sentimentColor = 'text-gray-500';
551
  let sentimentIcon = 'fa-newspaper';
552
- const title = article.title ? article.title.toLowerCase() : '';
553
 
554
- if (title.includes('breakthrough') || title.includes('innovative') || title.includes('success') ||
555
- title.includes('growth') || title.includes('launch') || title.includes('record')) {
556
- sentimentColor = 'text-techGreen';
557
  sentimentIcon = 'fa-arrow-up';
558
- } else if (title.includes('hack') || title.includes('breach') || title.includes('layoff') ||
559
- title.includes('decline') || title.includes('warning') || title.includes('issue') ||
560
- title.includes('problem') || title.includes('failure')) {
561
- sentimentColor = 'text-techRed';
562
  sentimentIcon = 'fa-arrow-down';
563
  }
564
 
@@ -568,30 +689,32 @@
568
  year: 'numeric',
569
  month: 'short',
570
  day: 'numeric'
571
- });
572
 
573
  // Get source name
574
- const sourceName = article.source || 'Unknown Source';
575
 
576
  // Create card HTML
577
  newsCard.innerHTML = `
578
- <div class="flex flex-col md:flex-row gap-4">
579
- <div class="md:w-1/4">
580
- <img src="${article.image_url || 'https://via.placeholder.com/300x200?text=No+Image'}"
581
- alt="${article.title || 'News image'}"
582
- class="w-full h-40 object-cover rounded-lg">
 
 
583
  </div>
584
- <div class="md:w-3/4">
585
  <div class="flex justify-between items-start mb-2">
586
- <h3 class="text-xl font-bold text-techDark">${article.title || 'No title available'}</h3>
587
  <i class="fas ${sentimentIcon} ${sentimentColor} text-lg"></i>
588
  </div>
589
- <p class="text-gray-600 mb-4">${article.description || 'No description available.'}</p>
590
- <div class="flex justify-between items-center text-sm text-gray-500">
591
- <span>${sourceName} • ${formattedDate}</span>
592
  <a href="${article.url || '#'}" target="_blank" rel="noopener noreferrer"
593
- class="text-techBlue hover:underline">
594
- Read More <i class="fas fa-arrow-right ml-1"></i>
595
  </a>
596
  </div>
597
  </div>
@@ -609,35 +732,16 @@
609
  }
610
  }
611
 
612
- function updateTicker(articles) {
613
- let tickerHTML = '';
614
-
615
- if (articles && articles.length > 0) {
616
- articles.slice(0, 8).forEach(article => {
617
- // Truncate title if too long
618
- const shortTitle = article.title && article.title.length > 50 ?
619
- article.title.substring(0, 47) + '...' : article.title || 'Tech news';
620
-
621
- tickerHTML += `
622
- <span class="font-medium">${shortTitle}</span>
623
- <span class="mx-3 text-gray-400">|</span>
624
- `;
625
- });
626
- }
627
-
628
- document.getElementById('tech-ticker').innerHTML = tickerHTML || 'Technology news headlines loaded';
629
- }
630
-
631
  function showError(message) {
632
  // Hide loading states
633
  document.getElementById('loading-skeleton').classList.add('hidden');
634
 
635
  // Show error message
636
  const errorElement = document.createElement('div');
637
- errorElement.className = 'bg-techRed text-white p-4 rounded-lg mb-6';
638
  errorElement.innerHTML = `
639
- <div class="flex items-center">
640
- <i class="fas fa-exclamation-circle mr-2"></i>
641
  <span>${message}</span>
642
  </div>
643
  `;
 
3
  <head>
4
  <meta charset="UTF-8">
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>NEXUS | Futuristic Tech News</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
  <script>
 
11
  theme: {
12
  extend: {
13
  colors: {
14
+ quantumBlue: '#00e1ff',
15
+ neonPink: '#ff36fc',
16
+ matrixGreen: '#00ff9d',
17
+ cyberPurple: '#a600ff',
18
+ hologramTeal: '#00ffcc',
19
+ voidBlack: '#050510',
20
+ spaceGray: '#1a1a2e',
21
+ uiGray: '#2a2a3a',
22
+ uiLight: '#e0e0ff'
23
+ },
24
+ fontFamily: {
25
+ 'sans': ['"Rajdhani"', 'sans-serif'],
26
+ 'mono': ['"Space Mono"', 'monospace'],
27
+ 'display': ['"Orbitron"', 'sans-serif']
28
+ },
29
+ animation: {
30
+ 'glow': 'glow 2s ease-in-out infinite alternate',
31
+ 'float': 'float 6s ease-in-out infinite',
32
+ 'text-shine': 'text-shine 3s ease-in-out infinite alternate',
33
+ 'pulse-slow': 'pulse 5s infinite'
34
+ },
35
+ keyframes: {
36
+ glow: {
37
+ '0%': { 'box-shadow': '0 0 5px rgba(0, 225, 255, 0.3)' },
38
+ '100%': { 'box-shadow': '0 0 20px rgba(0, 225, 255, 0.5)' }
39
+ },
40
+ float: {
41
+ '0%, 100%': { transform: 'translateY(0)' },
42
+ '50%': { transform: 'translateY(-10px)' }
43
+ },
44
+ 'text-shine': {
45
+ '0%': { 'background-position': '0% 50%' },
46
+ '100%': { 'background-position': '100% 50%' }
47
+ }
48
  }
49
  }
50
  }
51
  }
52
  </script>
53
  <style>
54
+ @import url('https://fonts.googleapis.com/css2?family=Orbitron:wght@400;500;600;700&family=Space+Mono:ital,wght@0,400;0,700;1,400&family=Rajdhani:wght@300;400;500;600;700&display=swap');
55
+
56
+ body {
57
+ background-color: #050510;
58
+ color: #e0e0ff;
59
+ min-height: 100vh;
60
+ position: relative;
61
+ overflow-x: hidden;
62
+ }
63
+
64
+ body::before {
65
+ content: "";
66
+ position: fixed;
67
+ top: 0;
68
+ left: 0;
69
+ width: 100%;
70
+ height: 100%;
71
+ background:
72
+ radial-gradient(circle at 20% 30%, rgba(0, 225, 255, 0.05) 0%, transparent 30%),
73
+ radial-gradient(circle at 80% 70%, rgba(255, 54, 252, 0.05) 0%, transparent 30%);
74
+ pointer-events: none;
75
+ z-index: -1;
76
+ }
77
+
78
+ .ui-panel {
79
+ background: rgba(26, 26, 46, 0.7);
80
+ backdrop-filter: blur(12px);
81
+ border: 1px solid rgba(0, 225, 255, 0.1);
82
+ transition: all 0.3s ease;
83
+ }
84
+
85
+ .ui-panel:hover {
86
+ border-color: rgba(0, 225, 255, 0.3);
87
+ }
88
+
89
+ .news-card {
90
+ transition: all 0.3s ease;
91
+ position: relative;
92
+ overflow: hidden;
93
+ }
94
+
95
  .news-card:hover {
96
+ transform: translateY(-3px);
 
97
  }
98
+
99
+ .news-card::after {
100
+ content: "";
101
+ position: absolute;
102
+ bottom: 0;
103
+ left: 0;
104
+ width: 100%;
105
+ height: 2px;
106
+ background: linear-gradient(90deg, #00e1ff, #ff36fc);
107
+ transform: scaleX(0);
108
+ transform-origin: left;
109
+ transition: transform 0.3s ease;
110
+ }
111
+
112
+ .news-card:hover::after {
113
+ transform: scaleX(1);
114
+ }
115
+
116
+ .gradient-text {
117
+ background: linear-gradient(90deg, #00e1ff, #ff36fc);
118
+ -webkit-background-clip: text;
119
+ background-clip: text;
120
+ color: transparent;
121
+ background-size: 200% 200%;
122
+ animation: gradient 8s ease infinite;
123
+ }
124
+
125
+ @keyframes gradient {
126
+ 0% { background-position: 0% 50%; }
127
+ 50% { background-position: 100% 50%; }
128
+ 100% { background-position: 0% 50%; }
129
+ }
130
+
131
+ .cyber-button {
132
+ position: relative;
133
+ overflow: hidden;
134
+ transition: all 0.3s;
135
+ }
136
+
137
+ .cyber-button::before {
138
+ content: "";
139
+ position: absolute;
140
+ top: 0;
141
+ left: -100%;
142
+ width: 100%;
143
+ height: 100%;
144
+ background: linear-gradient(
145
+ 90deg,
146
+ transparent,
147
+ rgba(0, 225, 255, 0.2),
148
+ transparent
149
+ );
150
+ transition: 0.5s;
151
  }
152
+
153
+ .cyber-button:hover::before {
154
+ left: 100%;
155
  }
156
+
157
+ .grid-pattern {
158
+ background-image:
159
+ linear-gradient(rgba(0, 225, 255, 0.05) 1px, transparent 1px),
160
+ linear-gradient(90deg, rgba(0, 225, 255, 0.05) 1px, transparent 1px);
161
+ background-size: 20px 20px;
162
  }
163
+
164
  .marquee {
165
  white-space: nowrap;
166
  overflow: hidden;
167
  box-sizing: border-box;
168
  }
169
+
170
  .marquee span {
171
  display: inline-block;
172
  padding-left: 100%;
173
+ animation: marquee 25s linear infinite;
174
  }
175
+
176
  @keyframes marquee {
177
  0% { transform: translate(0, 0); }
178
  100% { transform: translate(-100%, 0); }
179
  }
180
+
181
+ .holographic-effect {
182
+ position: relative;
183
+ }
184
+
185
+ .holographic-effect::before {
186
+ content: "";
187
+ position: absolute;
188
+ top: 0;
189
+ left: 0;
190
+ width: 100%;
191
+ height: 100%;
192
+ background:
193
+ linear-gradient(135deg,
194
+ rgba(0, 225, 255, 0.03) 0%,
195
+ rgba(255, 54, 252, 0.03) 50%,
196
+ rgba(0, 255, 157, 0.03) 100%);
197
+ pointer-events: none;
198
+ z-index: -1;
199
+ }
200
  </style>
201
  </head>
202
+ <body class="font-sans">
203
+ <!-- Floating elements -->
204
+ <div class="fixed top-1/4 left-10 w-3 h-3 rounded-full bg-quantumBlue opacity-30 animate-float" style="animation-delay: 0s;"></div>
205
+ <div class="fixed top-1/3 right-20 w-4 h-4 rounded-full bg-neonPink opacity-30 animate-float" style="animation-delay: 1s;"></div>
206
+ <div class="fixed bottom-1/4 left-1/4 w-5 h-5 rounded-full bg-cyberPurple opacity-30 animate-float" style="animation-delay: 2s;"></div>
207
+
208
  <!-- Header -->
209
+ <header class="bg-voidBlack border-b border-uiGray/20 sticky top-0 z-50">
210
+ <div class="container mx-auto px-6 py-4">
211
  <div class="flex flex-col md:flex-row justify-between items-center">
212
  <div class="flex items-center mb-4 md:mb-0">
213
+ <div class="w-10 h-10 rounded-full bg-gradient-to-br from-quantumBlue to-cyberPurple flex items-center justify-center mr-3">
214
+ <i class="fas fa-satellite text-white text-lg"></i>
215
+ </div>
216
+ <h1 class="text-3xl font-bold font-display tracking-tighter">
217
+ <span class="gradient-text">NEXUS</span>
218
+ </h1>
219
  </div>
220
+
221
+ <nav class="hidden md:flex space-x-6">
222
+ <a href="#" class="text-uiLight hover:text-quantumBlue transition font-medium">HOME</a>
223
+ <a href="#" class="text-uiLight hover:text-quantumBlue transition font-medium">TECH</a>
224
+ <a href="#" class="text-uiLight hover:text-quantumBlue transition font-medium">AI</a>
225
+ <a href="#" class="text-uiLight hover:text-quantumBlue transition font-medium">CYBER</a>
226
+ <a href="#" class="text-uiLight hover:text-quantumBlue transition font-medium">SPACE</a>
227
+ </nav>
228
+
229
+ <div class="flex items-center space-x-4 mt-4 md:mt-0">
230
+ <button class="px-4 py-2 rounded-md bg-uiGray/50 text-uiLight hover:bg-uiGray/70 transition font-mono text-sm cyber-button">
231
+ <i class="fas fa-user-astronaut mr-2"></i> SIGN IN
232
  </button>
233
  </div>
 
 
 
 
234
  </div>
235
  </div>
236
  </header>
237
 
 
 
 
 
 
 
 
 
 
238
  <!-- Main Content -->
239
+ <main class="container mx-auto px-6 py-8">
240
+ <!-- Hero Section -->
241
+ <section class="mb-12 grid-pattern rounded-xl overflow-hidden">
242
+ <div class="h-96 bg-gradient-to-br from-voidBlack to-spaceGray/80 relative flex items-center justify-center">
243
+ <div class="absolute inset-0 flex items-center justify-center">
244
+ <div class="w-full h-full opacity-20" style="background: radial-gradient(circle, rgba(0,225,255,0.3) 0%, transparent 70%);"></div>
245
+ </div>
246
+ <div class="relative z-10 text-center px-6 max-w-4xl">
247
+ <h2 class="text-4xl md:text-5xl font-display font-bold mb-4 tracking-tight">
248
+ <span class="gradient-text">THE FUTURE</span> IN REAL-TIME
249
+ </h2>
250
+ <p class="text-uiLight/80 mb-8 text-lg font-sans">
251
+ Cutting-edge technology news from across the quantum spectrum.
252
+ Stay ahead with our neural network-curated feed.
253
+ </p>
254
+ <div class="relative max-w-xl mx-auto">
255
+ <input type="text" placeholder="SEARCH THE NEXUS..."
256
+ class="w-full px-6 py-3 rounded-full bg-spaceGray/80 text-uiLight placeholder-uiLight/50 border border-uiGray/30 focus:outline-none focus:ring-1 focus:ring-quantumBlue focus:bg-spaceGray font-mono tracking-wider">
257
+ <button class="absolute right-3 top-3 text-uiLight hover:text-quantumBlue transition">
258
+ <i class="fas fa-search"></i>
259
+ </button>
260
+ </div>
261
+ </div>
262
+ </div>
263
+ </section>
264
+
265
  <div class="flex flex-col lg:flex-row gap-8">
266
  <!-- Left Column - News Feed -->
267
  <div class="w-full lg:w-2/3">
268
+ <!-- News Tabs -->
269
+ <div class="flex border-b border-uiGray/20 mb-6">
270
+ <button class="px-4 py-3 border-b-2 border-quantumBlue text-quantumBlue font-medium">LATEST</button>
271
+ <button class="px-4 py-3 text-uiLight/70 hover:text-uiLight transition">TRENDING</button>
272
+ <button class="px-4 py-3 text-uiLight/70 hover:text-uiLight transition">AI</button>
273
+ <button class="px-4 py-3 text-uiLight/70 hover:text-uiLight transition">QUANTUM</button>
274
+ <button class="px-4 py-3 text-uiLight/70 hover:text-uiLight transition">CYBER</button>
 
 
 
 
 
 
 
 
 
 
 
275
  </div>
276
 
277
  <!-- News Loading Skeleton -->
278
  <div id="loading-skeleton" class="space-y-6">
279
+ <div class="ui-panel rounded-lg p-6 animate-pulse">
280
+ <div class="h-6 bg-uiGray/30 rounded w-3/4 mb-4"></div>
281
+ <div class="h-4 bg-uiGray/20 rounded w-full mb-2"></div>
282
+ <div class="h-4 bg-uiGray/20 rounded w-5/6 mb-2"></div>
283
+ <div class="h-4 bg-uiGray/20 rounded w-4/6 mb-4"></div>
284
+ <div class="h-3 bg-uiGray/20 rounded w-1/4"></div>
285
  </div>
286
+ <div class="ui-panel rounded-lg p-6 animate-pulse">
287
+ <div class="h-6 bg-uiGray/30 rounded w-3/4 mb-4"></div>
288
+ <div class="h-4 bg-uiGray/20 rounded w-full mb-2"></div>
289
+ <div class="h-4 bg-uiGray/20 rounded w-5/6 mb-2"></div>
290
+ <div class="h-4 bg-uiGray/20 rounded w-4/6 mb-4"></div>
291
+ <div class="h-3 bg-uiGray/20 rounded w-1/4"></div>
292
  </div>
293
  </div>
294
 
 
298
  </div>
299
 
300
  <div class="mt-8 flex justify-center">
301
+ <button id="load-more" class="px-8 py-3 bg-gradient-to-r from-cyberPurple to-quantumBlue text-white rounded-md hover:opacity-90 transition-all duration-300 font-mono cyber-button">
302
+ <i class="fas fa-chevron-down mr-2"></i> LOAD MORE
303
  </button>
304
  </div>
305
  </div>
306
 
307
+ <!-- Right Column - Sidebar -->
308
  <div class="w-full lg:w-1/3">
309
+ <!-- Trending Now -->
310
+ <div class="ui-panel rounded-lg p-6 mb-6">
311
+ <h3 class="text-lg font-bold font-mono text-quantumBlue mb-4 tracking-wider flex items-center">
312
+ <i class="fas fa-bolt mr-2"></i> TRENDING NOW
313
+ </h3>
314
  <div class="space-y-4" id="trending-topics">
315
  <div class="flex justify-between items-center animate-pulse">
316
  <div class="flex items-center">
317
+ <div class="w-8 h-8 bg-uiGray/30 rounded-full mr-3"></div>
318
+ <div class="h-4 bg-uiGray/20 rounded w-24"></div>
 
 
 
319
  </div>
320
+ <div class="h-4 bg-uiGray/20 rounded w-12"></div>
321
  </div>
322
  <div class="flex justify-between items-center animate-pulse">
323
  <div class="flex items-center">
324
+ <div class="w-8 h-8 bg-uiGray/30 rounded-full mr-3"></div>
325
+ <div class="h-4 bg-uiGray/20 rounded w-24"></div>
 
 
 
326
  </div>
327
+ <div class="h-4 bg-uiGray/20 rounded w-12"></div>
328
  </div>
329
  </div>
330
  </div>
331
 
332
+ <!-- Tech Brief -->
333
+ <div class="ui-panel rounded-lg p-6 mb-6">
334
+ <h3 class="text-lg font-bold font-mono text-quantumBlue mb-4 tracking-wider flex items-center">
335
+ <i class="fas fa-microchip mr-2"></i> TECH BRIEF
336
+ </h3>
337
+ <div class="space-y-4">
338
+ <div class="p-4 bg-spaceGray/50 rounded-md border-l-4 border-quantumBlue">
339
+ <div class="flex items-start">
340
+ <div class="flex-shrink-0 mt-1">
341
+ <div class="w-3 h-3 rounded-full bg-quantumBlue animate-pulse-slow"></div>
342
+ </div>
343
+ <div class="ml-3">
344
+ <p class="text-sm font-mono text-uiLight">QUANTUM COMPUTING BREAKTHROUGH AT GOOGLE</p>
345
+ <p class="text-xs text-uiLight/50 mt-1">12 MINUTES AGO</p>
346
+ </div>
347
+ </div>
348
  </div>
349
+ <div class="p-4 bg-spaceGray/50 rounded-md border-l-4 border-neonPink">
350
+ <div class="flex items-start">
351
+ <div class="flex-shrink-0 mt-1">
352
+ <div class="w-3 h-3 rounded-full bg-neonPink animate-pulse-slow"></div>
353
+ </div>
354
+ <div class="ml-3">
355
+ <p class="text-sm font-mono text-uiLight">APPLE ANNOUNCES NEURAL INTERFACE RESEARCH</p>
356
+ <p class="text-xs text-uiLight/50 mt-1">38 MINUTES AGO</p>
357
+ </div>
358
+ </div>
359
  </div>
360
+ <div class="p-4 bg-spaceGray/50 rounded-md border-l-4 border-matrixGreen">
361
+ <div class="flex items-start">
362
+ <div class="flex-shrink-0 mt-1">
363
+ <div class="w-3 h-3 rounded-full bg-matrixGreen animate-pulse-slow"></div>
364
+ </div>
365
+ <div class="ml-3">
366
+ <p class="text-sm font-mono text-uiLight">SPACEX LAUNCHES NEXT-GEN STARLINK SATELLITES</p>
367
+ <p class="text-xs text-uiLight/50 mt-1">1 HOUR AGO</p>
368
+ </div>
369
+ </div>
370
  </div>
371
  </div>
372
  </div>
373
 
374
  <!-- Newsletter -->
375
+ <div class="ui-panel rounded-lg p-6 bg-gradient-to-br from-spaceGray/80 to-voidBlack/80">
376
+ <h3 class="text-lg font-bold font-mono text-quantumBlue mb-2 tracking-wider">
377
+ <i class="fas fa-envelope mr-2"></i> NEXUS NEWSLETTER
378
+ </h3>
379
+ <p class="mb-4 text-uiLight/70 text-sm">Get the future delivered to your inbox</p>
380
  <form class="space-y-3">
381
+ <input type="email" placeholder="YOUR@EMAIL.COM"
382
+ class="w-full px-4 py-2 rounded bg-spaceGray/70 text-uiLight placeholder-uiLight/50 border border-uiGray/30 focus:outline-none focus:ring-1 focus:ring-quantumBlue font-mono text-sm tracking-wider">
383
+ <button type="submit" class="w-full px-4 py-2 bg-gradient-to-r from-quantumBlue/90 to-cyberPurple/90 text-white rounded-md font-medium hover:opacity-90 transition font-mono text-sm tracking-wider cyber-button">
384
+ <i class="fas fa-paper-plane mr-2"></i> SUBSCRIBE
385
  </button>
386
  </form>
387
  </div>
 
390
  </main>
391
 
392
  <!-- Footer -->
393
+ <footer class="bg-voidBlack border-t border-uiGray/20 py-12 mt-12">
394
+ <div class="container mx-auto px-6">
395
  <div class="grid grid-cols-1 md:grid-cols-4 gap-8">
396
  <div>
397
+ <h4 class="text-xl font-bold font-display text-uiLight mb-4 tracking-tighter">
398
+ <span class="gradient-text">NEXUS</span>
399
+ </h4>
400
+ <p class="text-uiLight/60 text-sm font-sans">The premier source for tomorrow's technology, today.</p>
401
+ <div class="flex space-x-4 mt-4">
402
+ <a href="#" class="text-uiLight/60 hover:text-quantumBlue transition"><i class="fab fa-twitter"></i></a>
403
+ <a href="#" class="text-uiLight/60 hover:text-quantumBlue transition"><i class="fab fa-linkedin"></i></a>
404
+ <a href="#" class="text-uiLight/60 hover:text-quantumBlue transition"><i class="fab fa-github"></i></a>
405
+ <a href="#" class="text-uiLight/60 hover:text-quantumBlue transition"><i class="fab fa-youtube"></i></a>
406
+ </div>
407
  </div>
408
  <div>
409
+ <h4 class="text-sm font-bold font-mono text-quantumBlue mb-4 tracking-wider">EXPLORE</h4>
410
  <ul class="space-y-2">
411
+ <li><a href="#" class="text-uiLight/60 hover:text-uiLight transition text-sm">Technology</a></li>
412
+ <li><a href="#" class="text-uiLight/60 hover:text-uiLight transition text-sm">Artificial Intelligence</a></li>
413
+ <li><a href="#" class="text-uiLight/60 hover:text-uiLight transition text-sm">Quantum Computing</a></li>
414
+ <li><a href="#" class="text-uiLight/60 hover:text-uiLight transition text-sm">Cybersecurity</a></li>
415
  </ul>
416
  </div>
417
  <div>
418
+ <h4 class="text-sm font-bold font-mono text-quantumBlue mb-4 tracking-wider">COMPANY</h4>
419
  <ul class="space-y-2">
420
+ <li><a href="#" class="text-uiLight/60 hover:text-uiLight transition text-sm">About</a></li>
421
+ <li><a href="#" class="text-uiLight/60 hover:text-uiLight transition text-sm">Careers</a></li>
422
+ <li><a href="#" class="text-uiLight/60 hover:text-uiLight transition text-sm">Privacy</a></li>
423
+ <li><a href="#" class="text-uiLight/60 hover:text-uiLight transition text-sm">Terms</a></li>
424
  </ul>
425
  </div>
426
  <div>
427
+ <h4 class="text-sm font-bold font-mono text-quantumBlue mb-4 tracking-wider">CONTACT</h4>
428
+ <ul class="space-y-2">
429
+ <li class="text-uiLight/60 text-sm">hello@nexus.tech</li>
430
+ <li class="text-uiLight/60 text-sm">+1 (555) 123-4567</li>
431
+ <li class="text-uiLight/60 text-sm">San Francisco, CA</li>
432
+ </ul>
433
+ </div>
434
+ </div>
435
+ <div class="border-t border-uiGray/20 mt-8 pt-8 flex flex-col md:flex-row justify-between items-center">
436
+ <p class="text-uiLight/50 text-xs mb-4 md:mb-0">© 2023 NEXUS TECHNOLOGIES. ALL RIGHTS RESERVED.</p>
437
+ <div class="flex space-x-4">
438
+ <a href="#" class="text-uiLight/50 hover:text-uiLight transition text-xs">Privacy Policy</a>
439
+ <a href="#" class="text-uiLight/50 hover:text-uiLight transition text-xs">Terms of Service</a>
440
+ <a href="#" class="text-uiLight/50 hover:text-uiLight transition text-xs">Cookies</a>
441
  </div>
442
  </div>
443
  </div>
 
448
  const NEWSAPI_API_KEY = 'f764fe522436442d9bdafbae241d7b63';
449
  const MARKETAUX_API_TOKEN = 'x7do5W51vWCggI5OC0qDPYYPRRRBdpsZuydOkfPq';
450
 
 
451
  // API endpoints for each category
452
  const API_ENDPOINTS = {
453
  all: [
454
  'https://api.marketaux.com/v1/news/all?industries=Technology&filter_entities=true&limit=10&api_token=' + MARKETAUX_API_TOKEN,
455
  'https://newsapi.org/v2/everything?q=bitcoin&from=2025-04-23&sortBy=publishedAt&apiKey=' + NEWSAPI_API_KEY,
456
  'https://newsapi.org/v2/everything?q=apple&from=2025-05-22&to=2025-05-22&sortBy=popularity&apiKey=' + NEWSAPI_API_KEY,
457
+ 'https://newsapi.org/v2/top-headlines?sources=techcrunch&apiKey=' + NEWSAPI_API_KEY,
458
+ 'https://newsapi.org/v2/everything?q=energy&from=2025-05-22&to=2025-05-22&sortBy=popularity&apiKey=' + NEWSAPI_API_KEY,
459
+ 'https://newsapi.org/v2/everything?q=solar&from=2025-05-22&to=2025-05-22&sortBy=popularity&apiKey=' + NEWSAPI_API_KEY,
460
+ 'https://newsapi.org/v2/everything?q=wind+solar&from=2025-05-22&to=2025-05-22&sortBy=popularity&apiKey=' + NEWSAPI_API_KEY,
461
+ 'https://newsapi.org/v2/everything?q=verizonORsprintORt-mobileORmetroOR5gORwireless&from=2025-05-22&to=2025-05-22&sortBy=popularity&apiKey=' + NEWSAPI_API_KEY
462
  ],
463
  technology: [
464
  'https://newsapi.org/v2/everything?q=technology&from=2025-04-23&sortBy=publishedAt&apiKey=' + NEWSAPI_API_KEY,
 
503
  loadAllData();
504
 
505
  // Event listeners
 
506
  document.getElementById('load-more').addEventListener('click', loadMoreNews);
 
 
 
 
507
  });
508
 
509
  async function loadAllData() {
510
  try {
511
  await Promise.all([
512
  fetchNews(),
513
+ fetchTrendingTopics()
 
514
  ]);
515
  } catch (error) {
516
  console.error('Error loading data:', error);
517
+ showError('SYSTEM ERROR: FAILED TO LOAD DATA. PLEASE TRY AGAIN LATER.');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
518
  }
519
  }
520
 
521
  async function loadMoreNews() {
522
  const btn = document.getElementById('load-more');
523
  const originalText = btn.innerHTML;
524
+ btn.innerHTML = '<i class="fas fa-spinner fa-spin mr-1"></i> LOADING...';
525
  btn.disabled = true;
526
 
527
  currentNewsPage++;
 
530
  await fetchNews(false, true); // false = not refresh, true = append
531
  } catch (error) {
532
  console.error('Error loading more news:', error);
533
+ showError('NETWORK ERROR: FAILED TO LOAD MORE DATA.');
534
  currentNewsPage--; // Revert page increment on failure
535
  }
536
 
 
538
  btn.disabled = false;
539
  }
540
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
541
  // API Fetch Functions
542
  async function fetchNews(refresh = false, append = false) {
543
  try {
 
586
 
587
  if (allArticles.length > 0) {
588
  updateNewsUI(allArticles, refresh, append);
 
589
  }
590
  } catch (error) {
591
  console.error('Error fetching news:', error);
 
606
  async function fetchTrendingTopics() {
607
  try {
608
  // For demo purposes, we'll use a static list
 
609
  const trendingTopics = [
610
+ { name: "AI ADVANCEMENTS", mentions: 1245 },
611
+ { name: "QUANTUM COMPUTING", mentions: 876 },
612
+ { name: "5G ROLLOUT", mentions: 754 },
613
+ { name: "METAVERSE", mentions: 689 },
614
+ { name: "CYBERSECURITY", mentions: 632 }
615
  ];
616
 
617
  updateTrendingTopicsUI(trendingTopics);
 
621
  }
622
  }
623
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
624
  // UI Update Functions
625
  function updateTrendingTopicsUI(topics) {
626
  const trendingContainer = document.getElementById('trending-topics');
 
632
 
633
  topicElement.innerHTML = `
634
  <div class="flex items-center">
635
+ <div class="w-8 h-8 rounded-full bg-gradient-to-br from-quantumBlue/20 to-neonPink/20 text-quantumBlue flex items-center justify-center mr-3 text-xs font-mono">
636
+ ${Math.floor(Math.random() * 9) + 1}
637
  </div>
638
+ <span class="font-mono text-sm text-uiLight">${topic.name}</span>
639
  </div>
640
  <div class="text-right">
641
+ <span class="text-xs font-mono text-uiLight/60">${topic.mentions.toLocaleString()}</span>
642
  </div>
643
  `;
644
 
 
646
  });
647
  }
648
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
649
  function updateNewsUI(articles, refresh, append) {
650
  const newsContainer = document.getElementById('news-container');
651
 
 
665
  // Add articles to container
666
  articles.forEach(article => {
667
  const newsCard = document.createElement('div');
668
+ newsCard.className = 'news-card ui-panel rounded-lg p-6';
669
 
670
  // Simple sentiment analysis based on title keywords
671
+ let sentimentColor = 'text-quantumBlue';
672
  let sentimentIcon = 'fa-newspaper';
673
+ const title = article.title ? article.title.toUpperCase() : '';
674
 
675
+ if (title.includes('BREAKTHROUGH') || title.includes('INNOVATIVE') || title.includes('SUCCESS') ||
676
+ title.includes('GROWTH') || title.includes('LAUNCH') || title.includes('RECORD')) {
677
+ sentimentColor = 'text-matrixGreen';
678
  sentimentIcon = 'fa-arrow-up';
679
+ } else if (title.includes('HACK') || title.includes('BREACH') || title.includes('LAYOFF') ||
680
+ title.includes('DECLINE') || title.includes('WARNING') || title.includes('ISSUE') ||
681
+ title.includes('PROBLEM') || title.includes('FAILURE')) {
682
+ sentimentColor = 'text-neonPink';
683
  sentimentIcon = 'fa-arrow-down';
684
  }
685
 
 
689
  year: 'numeric',
690
  month: 'short',
691
  day: 'numeric'
692
+ }).toUpperCase();
693
 
694
  // Get source name
695
+ const sourceName = article.source ? article.source.toUpperCase() : 'UNKNOWN SOURCE';
696
 
697
  // Create card HTML
698
  newsCard.innerHTML = `
699
+ <div class="flex flex-col md:flex-row gap-6">
700
+ <div class="md:w-1/3">
701
+ <div class="w-full h-40 bg-uiGray/30 rounded-lg overflow-hidden">
702
+ <img src="${article.image_url || 'https://via.placeholder.com/300x200/1a1a2e/00e1ff?text=NEXUS'}"
703
+ alt="${article.title || 'NEWS IMAGE'}"
704
+ class="w-full h-full object-cover">
705
+ </div>
706
  </div>
707
+ <div class="md:w-2/3">
708
  <div class="flex justify-between items-start mb-2">
709
+ <h3 class="text-xl font-medium font-sans text-uiLight">${article.title || 'NO TITLE AVAILABLE'}</h3>
710
  <i class="fas ${sentimentIcon} ${sentimentColor} text-lg"></i>
711
  </div>
712
+ <p class="text-uiLight/70 mb-4 text-sm">${article.description || 'NO DESCRIPTION AVAILABLE.'}</p>
713
+ <div class="flex justify-between items-center text-xs font-mono tracking-wider text-uiLight/50">
714
+ <span>${sourceName} <span class="mx-2"></span> ${formattedDate}</span>
715
  <a href="${article.url || '#'}" target="_blank" rel="noopener noreferrer"
716
+ class="text-quantumBlue hover:text-uiLight transition flex items-center">
717
+ READ <i class="fas fa-external-link-alt ml-1 text-xs"></i>
718
  </a>
719
  </div>
720
  </div>
 
732
  }
733
  }
734
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
735
  function showError(message) {
736
  // Hide loading states
737
  document.getElementById('loading-skeleton').classList.add('hidden');
738
 
739
  // Show error message
740
  const errorElement = document.createElement('div');
741
+ errorElement.className = 'ui-panel rounded-lg p-6';
742
  errorElement.innerHTML = `
743
+ <div class="flex items-center text-quantumBlue font-mono tracking-wider">
744
+ <i class="fas fa-exclamation-triangle mr-2"></i>
745
  <span>${message}</span>
746
  </div>
747
  `;
prompts.txt CHANGED
@@ -2,4 +2,6 @@ make a website that automatically aggregates the material that it will post, whi
2
  what the hell are you doing? i specifically asked you not to code in fake/sample/simulated articles or any data that isnt aggrigated or scraped. this site has to use APIs from other sources to get its current prices for the currencies and to get current articles and stories for its News. Do not use any simulated articles or anything that isnt gotten through API, All information on this site must be current!
3
  make this into a Tech news automated news aggrigator instead of Crypto news. use https://api.marketaux.com/v1/news/all?industries=Technology&filter_entities=true&limit=10&published_after=2025-05-22T08:54&api_token=x7do5W51vWCggI5OC0qDPYYPRRRBdpsZuydOkfPq for the api.
4
  in the Categories drop down menu, the categories should be: 1 - Energy, with API: https://api.marketaux.com/v1/news/all?industries=Energy&filter_entities=true&limit=10&published_after=2025-05-22T09:04&api_token=x7do5W51vWCggI5OC0qDPYYPRRRBdpsZuydOkfPq. 2 - Communication Services with API: https://api.marketaux.com/v1/news/all?industries=Communication Services&filter_entities=true&limit=10&published_after=2025-05-22T09:07&api_token=x7do5W51vWCggI5OC0qDPYYPRRRBdpsZuydOkfPq. 3 - Financial with API: https://api.marketaux.com/v1/news/all?industries=Financial&filter_entities=true&limit=10&published_after=2025-05-22T09:08&api_token=x7do5W51vWCggI5OC0qDPYYPRRRBdpsZuydOkfPq. 4 - Healthcare with API: https://api.marketaux.com/v1/news/all?industries=Healthcare&filter_entities=true&limit=10&published_after=2025-05-22T09:09&api_token=x7do5W51vWCggI5OC0qDPYYPRRRBdpsZuydOkfPq. 5 - Industrial with API: https://api.marketaux.com/v1/news/all?industries=Industrials&filter_entities=true&limit=10&published_after=2025-05-22T09:10&api_token=x7do5W51vWCggI5OC0qDPYYPRRRBdpsZuydOkfPq. 6 - Real Estate with API: https://api.marketaux.com/v1/news/all?industries=Real Estate&filter_entities=true&limit=10&published_after=2025-05-22T09:11&api_token=x7do5W51vWCggI5OC0qDPYYPRRRBdpsZuydOkfPq. 7 - Utilities with API: https://api.marketaux.com/v1/news/all?industries=Utilities&filter_entities=true&limit=10&published_after=2025-05-22T09:12&api_token=x7do5W51vWCggI5OC0qDPYYPRRRBdpsZuydOkfPq.
5
- add these additional APIs to their respective categories: Technology API: https://newsapi.org/v2/everything?q=bitcoin&from=2025-04-23&sortBy=publishedAt&apiKey=f764fe522436442d9bdafbae241d7b63, https://newsapi.org/v2/everything?q=apple&from=2025-05-22&to=2025-05-22&sortBy=popularity&apiKey=f764fe522436442d9bdafbae241d7b63, https://newsapi.org/v2/top-headlines?sources=techcrunch&apiKey=f764fe522436442d9bdafbae241d7b63. Energy API - https://newsapi.org/v2/everything?q=energy&from=2025-05-22&to=2025-05-22&sortBy=popularity&apiKey=f764fe522436442d9bdafbae241d7b63, https://newsapi.org/v2/everything?q=solar&from=2025-05-22&to=2025-05-22&sortBy=popularity&apiKey=f764fe522436442d9bdafbae241d7b63, https://newsapi.org/v2/everything?q=wind+solar&from=2025-05-22&to=2025-05-22&sortBy=popularity&apiKey=f764fe522436442d9bdafbae241d7b63. Communication Services API: https://newsapi.org/v2/everything?q=verizonORsprintORt-mobileORmetroOR5gORwireless&from=2025-05-22&to=2025-05-22&sortBy=popularity&apiKey=f764fe522436442d9bdafbae241d7b63
 
 
 
2
  what the hell are you doing? i specifically asked you not to code in fake/sample/simulated articles or any data that isnt aggrigated or scraped. this site has to use APIs from other sources to get its current prices for the currencies and to get current articles and stories for its News. Do not use any simulated articles or anything that isnt gotten through API, All information on this site must be current!
3
  make this into a Tech news automated news aggrigator instead of Crypto news. use https://api.marketaux.com/v1/news/all?industries=Technology&filter_entities=true&limit=10&published_after=2025-05-22T08:54&api_token=x7do5W51vWCggI5OC0qDPYYPRRRBdpsZuydOkfPq for the api.
4
  in the Categories drop down menu, the categories should be: 1 - Energy, with API: https://api.marketaux.com/v1/news/all?industries=Energy&filter_entities=true&limit=10&published_after=2025-05-22T09:04&api_token=x7do5W51vWCggI5OC0qDPYYPRRRBdpsZuydOkfPq. 2 - Communication Services with API: https://api.marketaux.com/v1/news/all?industries=Communication Services&filter_entities=true&limit=10&published_after=2025-05-22T09:07&api_token=x7do5W51vWCggI5OC0qDPYYPRRRBdpsZuydOkfPq. 3 - Financial with API: https://api.marketaux.com/v1/news/all?industries=Financial&filter_entities=true&limit=10&published_after=2025-05-22T09:08&api_token=x7do5W51vWCggI5OC0qDPYYPRRRBdpsZuydOkfPq. 4 - Healthcare with API: https://api.marketaux.com/v1/news/all?industries=Healthcare&filter_entities=true&limit=10&published_after=2025-05-22T09:09&api_token=x7do5W51vWCggI5OC0qDPYYPRRRBdpsZuydOkfPq. 5 - Industrial with API: https://api.marketaux.com/v1/news/all?industries=Industrials&filter_entities=true&limit=10&published_after=2025-05-22T09:10&api_token=x7do5W51vWCggI5OC0qDPYYPRRRBdpsZuydOkfPq. 6 - Real Estate with API: https://api.marketaux.com/v1/news/all?industries=Real Estate&filter_entities=true&limit=10&published_after=2025-05-22T09:11&api_token=x7do5W51vWCggI5OC0qDPYYPRRRBdpsZuydOkfPq. 7 - Utilities with API: https://api.marketaux.com/v1/news/all?industries=Utilities&filter_entities=true&limit=10&published_after=2025-05-22T09:12&api_token=x7do5W51vWCggI5OC0qDPYYPRRRBdpsZuydOkfPq.
5
+ add these additional APIs to their respective categories: Technology API: https://newsapi.org/v2/everything?q=bitcoin&from=2025-04-23&sortBy=publishedAt&apiKey=f764fe522436442d9bdafbae241d7b63, https://newsapi.org/v2/everything?q=apple&from=2025-05-22&to=2025-05-22&sortBy=popularity&apiKey=f764fe522436442d9bdafbae241d7b63, https://newsapi.org/v2/top-headlines?sources=techcrunch&apiKey=f764fe522436442d9bdafbae241d7b63. Energy API - https://newsapi.org/v2/everything?q=energy&from=2025-05-22&to=2025-05-22&sortBy=popularity&apiKey=f764fe522436442d9bdafbae241d7b63, https://newsapi.org/v2/everything?q=solar&from=2025-05-22&to=2025-05-22&sortBy=popularity&apiKey=f764fe522436442d9bdafbae241d7b63, https://newsapi.org/v2/everything?q=wind+solar&from=2025-05-22&to=2025-05-22&sortBy=popularity&apiKey=f764fe522436442d9bdafbae241d7b63. Communication Services API: https://newsapi.org/v2/everything?q=verizonORsprintORt-mobileORmetroOR5gORwireless&from=2025-05-22&to=2025-05-22&sortBy=popularity&apiKey=f764fe522436442d9bdafbae241d7b63
6
+ change the theme to something more modern, techy, sleek and vibrant, vaporwave-ish feel.
7
+ change the them to something more futuristic and easier on the eye look.