vitaliyMiskevuch1212/VERIDIAN

GitHub: vitaliyMiskevuch1212/VERIDIAN

一个实时地缘政治情报仪表盘,将全球事件可视化并自动生成 AI 金融交易信号,解决信息延迟与碎片化问题。

Stars: 0 | Forks: 0

# 🌐 VERIDIAN **实时地缘政治情报 + AI 交易信号** ![VERIDIAN 预览](https://raw.githubusercontent.com/vitaliyMiskevuch1212/VERIDIAN/main/Screenshot/home.png) Live Demo [![MERN 栈](https://img.shields.io/badge/Stack-MERN-00D4FF?style=for-the-badge&logo=mongodb&logoColor=white)](https://www.mongodb.com/) [![React](https://img.shields.io/badge/React-18-61DAFB?style=for-the-badge&logo=react&logoColor=black)](https://reactjs.org/) [![Node.js](https://img.shields.io/badge/Node.js-Express-339933?style=for-the-badge&logo=nodedotjs&logoColor=white)](https://nodejs.org/) [![Groq AI](https://img.shields.io/badge/AI-Groq_Llama_3.1-00FF88?style=for-the-badge)](https://groq.com/) [![WebGL](https://img.shields.io/badge/WebGL-Globe.gl-7C3AED?style=for-the-badge)](https://globe.gl/) [![免费 API](https://img.shields.io/badge/Cost-100%25_Free_APIs-F59E0B?style=for-the-badge)](/) [![许可证](https://img.shields.io/badge/License-MIT-EF4444?style=for-the-badge)](/)
## 🔴 问题 — 为什么需要 VERIDIAN 在当今高度互联的全球经济中,地缘政治事件会在几秒钟内影响市场。军事升级、供应链封锁、自然灾害和民间动乱都会立即引发金融后果。然而,面向普通交易者和独立分析师的工具从根本上来说是失效的。 ### 情报缺口 **1. “那又怎样?”真空** 传统的地缘政治追踪平台(如 LiveUAMap、Crisis24、Conflictly)擅长在地图上绘制事件。它们告诉你 *在哪里* 以及 *发生了什么*。但当一条输油管道破裂或航运航道被封锁时,它们在展示完地图上的点后,就完全抛弃了你,没有任何关于 *如何从财务上应对* 的信息。缺乏能够即时将地理或政治风险转化为可量化金融行动的系统。 **2. 延迟挤压** 当普通交易者阅读突发新闻、评估受影响区域、交叉参考实时市场数据并制定交易假设时,高频算法和机构投资者已经对事件进行了定价。人类综合判断本质上太慢了。普通交易者持续输掉执行竞赛,因为不存在能够原生实时自动评估地缘政治背景的通用系统。 **3. 深度工具碎片化** 构建一个连贯的风险评估需要同时打开 10 多个分散的标签页:Reuters 获取新闻、Flightradar24 监控军用飞机、alternative.me 衡量情绪、Yahoo Finance 关注价格走势、X 平台获取地面真相。这种碎片化破坏了情境感知能力,阻碍跨领域关联分析,并迫使决策者在不完整数据基础上做出判断。 **4. 机构门槛** 集成的多轴地缘政治金融情报平台确实存在——Bloomberg Terminal 和 Reuters Eikon。但它们每年每个用户成本高达 **24,000–30,000 美元**。学生、独立分析师和普通交易者被完全排除在企业级情报之外,造成了巨大且不公平的市场不对称。 ## ⚡ 解决方案 — VERIDIAN VERIDIAN 是一个完全公开的实时地缘政治情报指挥中心,能够直接消除以上所有痛点。无需登录,无门槛。任何访客均可立即使用。 | 痛点 | VERIDIAN 的解决方案 | |------|----------------------| | **“那又怎样?”真空** | GeoTrade AI 信号引擎可在 10 秒内根据实时事件自动生成 `买入 / 持有 / 卖出` 信号 | | **延迟挤压** | Groq 的亚秒级 LLaMA 3.1 推理——从世界事件到金融信号的速度快于任何人工流程 | | **工具碎片化** | 整合 Globe、新闻、军事航班、网络威胁和市场价格数据于零标签界面 | | **机构门槛** | 完全基于免费层级 API 构建。零成本运行。提供企业级情报,实现民主化 | ## 🎯 VERIDIAN 的独特之处 没有任何商业 OSINT 工具——无论是 Reuters Eikon、Bloomberg Terminal 还是 Conflictly——能够自动将实时地缘政治事件转化为带有 AI 推理的金融交易信号。VERIDIAN 在 **10 秒内** 完成这一过程。 ``` Hormuz tensions escalating → Oil supply disruption likely → BUY $XOM (confidence: 81%) China suspends rare earths → EV supply chain at risk → SELL $TSLA (confidence: 74%) Middle East escalation → Safe haven demand rising → BUY $GLD (confidence: 78%) ``` ### 竞争对手对比 | 功能 | Conflictly.app | LiveUAMap | Crisis24 | Bloomberg Terminal | **VERIDIAN** | |------|----------------|-----------|----------|---------------------|--------------| | 3D 交互式地球 | ✅ | ✅ | ❌ | ❌ | ✅ | | 实时冲突事件数据 | ✅ | ✅ | ✅ | ✅ | ✅ | | AI 国家情报简报 | ✅ | ❌ | ❌ | ❌ | ✅ | | **金融交易信号** | ❌ | ❌ | ❌ | 手动 | ✅ | | **股票 / 加密 / 外汇面板** | ❌ | ❌ | ❌ | ✅ | ✅ | | 军用飞行追踪 | ❌ | ✅ | ❌ | ❌ | ✅ | | 网络威胁地球图层 | ❌ | ❌ | ❌ | ❌ | ✅ | | **4 键 AI 零停机轮换** | ❌ | ❌ | ❌ | ❌ | ✅ | | 战局模拟推演 | ❌ | ❌ | ❌ | ❌ | ✅ | | 预测性升级引擎 | ❌ | ❌ | ❌ | ❌ | ✅ | | **每位用户年费** | 付费 | 付费 | 付费 | **$24,000+** | **$0** | ## ✨ 核心功能 ### 🤖 功能 1 — GeoTrade AI 信号引擎 *(核心差异化)* 填补“那又怎样?”真空的引擎。VERIDIAN 的 AI 读取实时地缘政治事件并生成实时金融信号——这是同类产品中唯一能够自主完成此操作的平台。 | 能力 | 描述 | |------|------| | **AI 信号生成** | Groq LLaMA 3.1 读取与标的证券行业/国家相关的当前 GDELT 事件 → 输出 `买入 / 持有 / 卖出` 及完整推理段落 | | **信号置信度** | 每条信号显示置信度百分比(例如 `买入 — 81%`) | | **股票搜索** | 输入任意代码:`AAPL` `TSLA` `XOM` `GLD` `SPY` | | **实时价格与涨跌幅** | 通过 `yahoo-finance2` npm(免密钥、免费)获取实时价格、百分比变化与成交量 | | **7 天 Sparkline 图表** | 使用 Recharts 的 `LineChart` 绘制过去 7 日价格走势 | | **恐惧与贪婪指数** | `alternative.me` API 仪表盘显示全球市场情绪(0–100) | | **加密货币面板** | BTC / ETH / SOL / XRP 实时价格(CoinGecko),附带基于地缘风险的关联标签 | | **外汇面板** | USD/JPY、EUR/USD、GBP/USD、USD/INR 实时汇率及国家旗帜 | | **大宗商品面板** | 黄金、原油、天然气(yahoo-finance2),附带冲突驱动上下文标签 | | **信号历史** | 每个代码的最近 5 条 AI 信号存储在 MongoDB,以迷你时间线形式展示 | **信号徽章:** | 信号 | 颜色 | |------|------| | `买入` | `#00FF88` 信号绿 | | `卖出` | `#EF4444` 红色 | | `持有` | `#EAB308` 黄色 | ### 🌍 功能 2 — 实时 3D 地缘政治地球仪 运营核心组件。一个 WebGL 地球仪,将地球上每一个活跃的地缘政治事件以发光、彩色标识点呈现——取代对外部 OSINT 地图工具的依赖。 | 能力 | 描述 | |------|------| | **自动旋转** | 地球以约 2 RPM 自动旋转,用户交互时暂停,8 秒后恢复 | | **发光事件点** | 每个事件按实际经纬度绘制,点大小随严重性缩放,颜色映射威胁等级 | | **脉冲红色圆环** | `CRITICAL` 显示双 CSS 关键帧环动画 | | **点击查看详情** | 点击任意国家触发 Groq AI 生成完整情报简报,弹出侧边栏 | | **2D 地图切换** | 在 Globe.gl 3D 视图与 Mapbox GL JS 平面地图间平滑过渡 | | **事件类型筛选** | 可切换:`冲突` `抗议` `灾害` `地震` `野火` `军用飞行` | | **时间范围筛选** | `最近 1h` / `6h` / `24h` / `7 天`——按事件时间戳过滤地球点 | | **热力图层** | Deck.gl 密度热力图叠加层,显示事件区域集中度 | | **飞至动画** | 点击新闻标题或代码项时,地球相机平滑飞至该事件 | | **弧线图层** | 军用飞行路径以动画弧线形式渲染在地球表面 | **严重性颜色体系:** | 等级 | 颜色 | 十六进制 | |------|------|----------| | `CRITICAL` | 🔴 红色 | `#EF4444` | | `HIGH` | 🟠 橙色 | `#F97316` | | `MEDIUM` | 🟡 黄色 | `#EAB308` | | `LOW` | 🟢 绿色 | `#00FF88` | ### 📰 功能 3 — 实时情报新闻聚合 实时、严重性编码的新闻面板聚合 **150+ 全球来源**——用单一统一订阅取代 Reuters/BBC/Al Jazeera 的多标签页堆叠。 | 能力 | 描述 | |------|------| | **多源聚合** | NewsAPI.org + `rss-parser` 直接获取 Reuters、BBC、Al Jazeera、Bloomberg 的 RSS | | **GDELT 事件源** | 实时地缘政治事件(含坐标),无限制、免密钥 | | **严重性颜色编码** | 每条标题由后端 NLP 关键词评分自动标记:`CRITICAL` / `HIGH` / `MEDIUM` / `LOW` | | **自动刷新** | 每 5 分钟静默刷新,新条目顶部淡入 | | **`BREAKING` 徽章** | 15 分钟内被 3 个以上来源覆盖的故事显示脉冲金色 `BREAKING` 徽章 | | **区域筛选标签** | `中东` `欧洲` `亚太` `美洲` `非洲` | | **实体链接** | 标题中的国家名称可点击——地球相机飞至该国 | | **国家旗帜** | 每条标题内联显示 `flagcdn.com` 的国家旗帜 | ### 🤖 功能 4 — AI 国家情报简报 点击地球上的任意国家 → 滑出侧边栏,2 秒内生成完整 AI 情报简报。这取代昂贵的国家风险订阅服务。 | 能力 | 描述 | |------|------| | **Groq LLaMA 3.1 8B** | 使用实时头条作为上下文生成 3 段式情报简报 | | **4 键轮换系统** | 4 个免费 Groq API 密钥轮询。若 Key 1 达到速率限制,Key 2 立即接管 | | **Google Gemini 降级** | 若 4 个 Groq 密钥用尽,Gemini API(15 请求/分钟免费)无缝接管 | | **稳定性评分** | AI 以发光 `Recharts RadialBarChart` 环的形式给出 0–100 分 | | **前三风险** | AI 返回三个最关键当前风险因素,结构化列出 | | **展望徽章** | `稳定` / `恶化` / `升级` / `危机`——颜色编码 | | **来源引用** | 简报列出用作上下文的具体头条 | | **15 分钟 MongoDB 缓存** | 生成的简报缓存 15 分钟,防止速率限制滥用 | ### ✈️ 功能 5 — 军用飞行追踪器 OpenSky Network 的实时飞机位置绘制在 3D 地球上——取代 Flightradar24 或 ADS-B Exchange 标签页。 | 能力 | 描述 | |------|------| | **实时位置** | 来自 OpenSky Network API(免费、匿名)的飞机实时经度、纬度、高度 | | **军用过滤** | 使用 ICAO 类型代码与呼号模式过滤军用/政府飞机 | | **地球弧线叠加** | 飞行路径以动画青色弧线形式渲染在 Globe.gl 弧图层上 | | **冲突邻近警报** | 距离活跃冲突区域 200 公里内的飞机显示橙色警告徽章 | | **激增检测** | 同一区域内 >5 架飞机聚集时显示 `SURGE` 徽章 | | **飞机信息弹出** | 点击任意航班 → 呼号、机型、起飞地、目的地、高度、速度 | | **60 秒自动刷新** | 飞行位置每 60 秒更新(符合速率限制) | ### 📡 功能 6 — 紧张度滚动条(Ticker) 位于仪表盘顶部的滚动警示条,风格类似金融股票代码——将地缘政治噪音转化为持续的关注层。 | 能力 | 描述 | |------|------| | **连续横向滚动** | CSS 关键帧动画使实时地缘政治警报跨全屏滚动 | | **严重性颜色编码** | 圆点 + 标签:`CRITICAL` 红色,`HIGH` 橙色,`MEDIUM` 黄色 | | **点击聚焦地球** | 点击任意条目调用 `Globe.gl flyTo()` 缩放至该事件 | | **5 分钟自动刷新** | 每 5 分钟更新最新 GDELT + NewsAPI 数据 | ### 🗺️ 功能 7 — 区域情报面板 四个区域专属情报卡片——取代手动综合区域威胁报告。 | 能力 | 描述 | |------|------| | **4 个面板** | `中东` · `欧洲` · `亚太` · `美洲`——每个区域附带区域分析 | | **前三事件** | 按严重性排序的当前区域最关键事件 | | **稳定性指数** | 区域评分 0–100,以彩色进度条呈现 | | **趋势关键词** | 每个区域前 5 个地缘政治热词(如 `停火`、`制裁`) | | **事件数 + 趋势** | 过去 24 小时事件总数及与前一 24 小时的趋势对比 | | **点击展开** | 点击区域面板使地球相机飞至该区域 | ### 🎮 功能 8 — 战术指挥中心接口 一系列高级指挥中心功能,共同消除多标签页工作流。 | 组件 | 描述 | |------|------| | **OmniCommand** | `Ctrl+K` 命令面板,用于即时导航与全平台搜索 | | **WargameModal** | AI 驱动的场景模拟器——例如 “如果伊朗封锁霍尔木兹海峡?” 并附带级联市场影响分析 | | **PredictionPanel** | AI 升级预测与概率时间线 | | **SitrepPanel** | 自动生成的 24 小时情况报告 | | **GlobalRiskIndex** | 综合全局风险指数,实时聚合所有活跃事件 | | **网络威胁图层** | 来自 `abuse.ch` 与 `URLhaus` 的实时僵尸网络 C2 服务器与恶意主机,在地球上叠加显示 | | **战术语音** | 语音命令接口——说出查询,聆听 AI 简报(文本转语音) | | **时间线滑块** | 可拖拽的时间线,浏览历史事件数据 | | **键盘快捷键** | 完整键盘导航:`G` 地球,`N` 新闻,`F` 金融,`M` 地图切换 | ## 🛠️ 技术栈 ### 前端 ![React](https://img.shields.io/badge/React_18-20232A?style=flat-square&logo=react&logoColor=61DAFB) ![Vite](https://img.shields.io/badge/Vite-646CFF?style=flat-square&logo=v&logoColor=white) ![Tailwind CSS](https://img.shields.io/badge/Tailwind_CSS-38B2AC?style=flat-square&logo=tailwind-css&logoColor=white) ![Globe.gl](https://img.shields.io/badge/Globe.gl-WebGL-7C3AED?style=flat-square) ![Mapbox](https://img.shields.io/badge/Mapbox_GL_JS-000000?style=flat-square&logo=mapbox&logoColor=white) ![Recharts](https://img.shields.io/badge/Recharts-Charts-22B5BF?style=flat-square) ![Socket.io](https://img.shields.io/badge/Socket.io-Client-010101?style=flat-square&logo=socket.io&logoColor=white) ### 后端 ![Node.js](https://img.shields.io/badge/Node.js-339933?style=flat-square&logo=node.js&logoColor=white) ![Express.js](https://img.shields.io/badge/Express.js-000000?style=flat-square&logo=express&logoColor=white) ![MongoDB](https://img.shields.io/badge/MongoDB_Atlas-47A248?style=flat-square&logo=mongodb&logoColor=white) ### 人工智能与情报 ![Groq](https://img.shields.io/badge/Groq_Llama_3.1-00FF88?style=flat-square) ![Google Gemini](https://img.shields.io/badge/Google_Gemini-8E75B2?style=flat-square&logo=google&logoColor=white) ![GDELT](https://img.shields.io/badge/GDELT_Project-F59E0B?style=flat-square) | 层级 | 技术 | 用途 | |------|------|------| | **前端框架** | React 18 + Vite | 快速 SPA —— 即时热重载 | | **样式** | Tailwind CSS + 自定义 CSS | 深色指挥中心 UI + 动画 | | **3D 地球** | Globe.gl | WebGL 地球 —— 点、弧线、热力图 | | **2D 地图** | Mapbox GL JS + MapLibre GL JS | 平坦地图切换视图 | | **数据图层** | Deck.gl | 热力图 + 飞行弧线 | | **图表** | Recharts | 火花线、稳定性环、情绪仪表 | | **实时通信** | Socket.io | 实时数据推送至客户端 | | **状态管理** | React Context API | DataContext + UIContext | | **后端** | Node.js + Express | REST API 服务器 | | **数据库** | MongoDB Atlas + Mongoose | 缓存简报、事件缓存、信号历史 | | **AI 主引擎** | Groq API —— 4 键轮换 | LLaMA 3.1 8B —— 简报 + 信号 | | **AI 降级** | Google Gemini API | 当 4 个 Groq 键受限时无缝接管 | | **金融数据** | yahoo-finance2 npm | 股票 + 商品,无密钥 | | **加密数据** | CoinGecko API | BTC/ETH/SOL/XRP 实时价格 | | **飞行数据** | OpenSky Network | 军用飞机位置 | | **前端部署** | Vercel | 免费,无限部署 | | **后端部署** | Railway | $5 免费额度,无冷启动 | ## 🏗️ 系统架构 ``` ┌─────────────────────────────────────────────────────────────────┐ │ DATA SOURCES │ ├──────────────┬──────────────┬──────────────┬────────────────────┤ │ GDELT/ACLED │ NewsAPI/RSS │ OpenSky │ Yahoo Finance │ │ USGS/GDACS │ │ ADS-B Exch. │ CoinGecko │ │ NASA FIRMS │ │ │ ExchangeRate API │ └──────┬───────┴──────┬───────┴──────┬───────┴────────┬───────────┘ │ │ │ │ ▼ ▼ ▼ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ EXPRESS BACKEND (Node.js) │ │ │ │ /api/events /api/news /api/flights /api/finance │ │ /api/cyber /api/ai/brief /api/ai/signal │ │ │ │ ┌───────────────────────────────────────────────────────────┐ │ │ │ groqService.js — 4-Key Rotation │ │ │ │ Key 1 → Key 2 → Key 3 → Key 4 → Gemini Fallback │ │ │ └───────────────────────────────────────────────────────────┘ │ │ │ │ ┌───────────────────┐ ┌─────────────────────────────────┐ │ │ │ cacheService.js │ │ MongoDB Atlas │ │ │ │ (in-memory Map) │ │ BriefCache + EventCache + │ │ │ │ 5-min TTL │ │ SignalHistory │ │ │ └───────────────────┘ └─────────────────────────────────┘ │ └─────────────────────────────┬───────────────────────────────────┘ │ REST API + Socket.io ▼ ┌─────────────────────────────────────────────────────────────────┐ │ REACT FRONTEND (Vite) │ │ │ │ ┌─ DashboardHeader ────────────────────────────────────────┐ │ │ │ Navbar (UTC clock + event count) → Ticker (scrolling) │ │ │ └──────────────────────────────────────────────────────────┘ │ │ │ │ ┌─ DashboardLeftPanel ──┐ ┌─ DashboardCenter ──────────┐ │ │ │ NewsPanel │ │ Globe.gl (3D) / Map2D │ │ │ │ SitrepPanel │ │ Event dots + arcs + │ │ │ │ TopKeywords │ │ heatmap + targeting │ │ │ └───────────────────────┘ └────────────────────────────┘ │ │ │ │ ┌─ DashboardRightPanel ────────────────────────────────────┐ │ │ │ CountryBrief → StabilityRing + Risks │ │ │ │ FinancePanel → MarketWatch + MarketGraph + SignalBadge │ │ │ │ FlightConsole → Military flight tracker │ │ │ │ PredictionPanel → AI escalation forecasts │ │ │ │ GlobalRiskIndex → Composite threat score │ │ │ └──────────────────────────────────────────────────────────┘ │ │ │ │ ┌─ DashboardOverlays ──────────────────────────────────────┐ │ │ │ OmniCommand (Ctrl+K) + WargameModal + KeyboardShortcuts │ │ │ │ ToastNotifications + TerminalLoader + PageLoader │ │ │ └──────────────────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────────┘ ``` ## 📁 项目结构 ``` VERIDIAN/ ├── client/ # ⚛️ React 18 + Vite Frontend │ ├── public/ │ │ └── favicon.png │ ├── index.html # Google Fonts + Font Awesome CDN │ ├── src/ │ │ ├── components/ │ │ │ ├── Globe.jsx # 🌍 Globe.gl 3D globe — event dots, arcs, heatmap │ │ │ ├── Map2D.jsx # 🗺️ Mapbox GL JS flat 2D map │ │ │ ├── Navbar.jsx # 🧭 Logo, UTC clock, event count, search │ │ │ ├── Ticker.jsx # 📡 Scrolling tension alert ticker bar │ │ │ ├── NewsPanel.jsx # 📰 Live intelligence news feed │ │ │ ├── CountryBrief.jsx # 🤖 AI country brief slide-in panel │ │ │ ├── FinancePanel.jsx # 📈 GeoTrade signal engine │ │ │ ├── MarketWatch.jsx # 💹 Live market data │ │ │ ├── MarketGraph.jsx # 📊 Market price charts and sparklines │ │ │ ├── FlightConsole.jsx # ✈️ Military flight tracker │ │ │ ├── RegionPanel.jsx # 🗺️ 4 regional intelligence cards │ │ │ ├── FilterBar.jsx # 🔽 Event type + time range filters │ │ │ ├── GlobalRiskIndex.jsx # 🔴 Composite global risk score │ │ │ ├── PredictionPanel.jsx # 🔮 AI escalation predictions │ │ │ ├── SitrepPanel.jsx # 📋 Auto-generated Situation Reports │ │ │ ├── WargameModal.jsx # 🎮 AI wargame scenario simulator │ │ │ ├── OmniCommand.jsx # ⌘ Ctrl+K command palette │ │ │ ├── NetworkGraph.jsx # 🕸️ Entity relationship graph │ │ │ ├── SystemTelemetry.jsx # 📟 Live system health stats │ │ │ ├── TargetingCursor.jsx # 🎯 Military-style crosshair cursor │ │ │ ├── TimelineScrubber.jsx # ⏱️ Draggable historical event timeline │ │ │ └── ToastNotifications.jsx # 🔔 Alert toast notification system │ │ │ │ │ ├── context/ │ │ │ ├── DataContext.jsx # 📦 Global data state │ │ │ └── UIContext.jsx # 🎛️ UI state — panels, modals, view mode │ │ │ │ │ ├── hooks/ │ │ │ ├── useGlobeData.js │ │ │ ├── useNewsData.js │ │ │ ├── useFinanceData.js │ │ │ ├── useAIData.js │ │ │ ├── useSocket.js │ │ │ ├── useTacticalAudio.js │ │ │ └── useTacticalVoice.js │ │ │ │ │ ├── layouts/ │ │ │ ├── DashboardHeader.jsx │ │ │ ├── DashboardLeftPanel.jsx │ │ │ ├── DashboardCenter.jsx │ │ │ ├── DashboardRightPanel.jsx │ │ │ └── DashboardOverlays.jsx │ │ │ │ │ ├── pages/ │ │ │ └── Dashboard.jsx │ │ │ │ │ ├── App.jsx │ │ ├── main.jsx │ │ └── index.css # Tailwind + CSS variables + animations │ │ │ ├── tailwind.config.js │ ├── vite.config.js │ └── package.json │ ├── server/ # 🖥️ Node.js + Express Backend │ ├── models/ │ │ ├── BriefCache.js # AI briefs — 15-min TTL │ │ ├── EventCache.js # GDELT/ACLED events — 5-min TTL │ │ └── SignalHistory.js # Last 5 AI signals per ticker │ │ │ ├── routes/ │ │ ├── events.js # GET /api/events │ │ ├── news.js # GET /api/news │ │ ├── finance.js # GET /api/finance/:ticker │ │ ├── flights.js # GET /api/flights │ │ ├── ai.js # POST /api/ai/brief + /api/ai/signal │ │ └── cyber.js # GET /api/cyber │ │ │ ├── services/ │ │ ├── groqService.js # 4-key Groq rotation + Gemini fallback │ │ └── cacheService.js # In-memory Map() cache — 5-min TTL │ │ │ ├── .env.example │ ├── index.js │ └── package.json │ ├── .gitignore └── README.md ``` ## 🔌 使用的 API | 类别 | 服务 | 是否需要密钥 | 免费限制 | |------|------|--------------|----------| | **地球** | Globe.gl | 否 | 无限制 | | **地图** | Mapbox GL JS | 是(免费) | 每月 50,000 次加载 | | **地图(降级)** | MapLibre GL JS | 否 | 无限制 | | **地缘政治事件** | GDELT 项目 API | 否 | 无限制 | | **冲突数据** | ACLED API | 是(免费) | 面向研究人员的免费额度 | | **新闻** | NewsAPI.org | 是(免费) | 每日 100 次请求 | | **新闻(RSS)** | rss-parser npm | 否 | 无限制 | | **地震** | USGS 地震 API | 否 | 无限制 | | **国家元数据** | RestCountries API | 否 | 无限制 | | **AI(主引擎)** | Groq API —— 4 个轮换密钥 | 是(免费) | 免费层级 | | **AI(降级)** | Google Gemini API | 是(免费) | 每分钟 15 次请求 | | **股票/商品** | yahoo-finance2 npm | 否 | 无限制 | | **加密货币** | CoinGecko API | 否 | 每月 10,000 次请求 | | **外汇** | ExchangeRate API | 是(免费) | 每月 1,500 次请求 | | **市场情绪** | alternative.me API | 否 | 无限制 | | **飞行数据** | OpenSky Network API | 否 | 免费(匿名) | | **僵尸网络** | abuse.ch Feodo Tracker | 否 | 无限制 | | **恶意软件** | URLhaus API | 否 | 无限制 | | **网络中断** | Cloudflare Radar API | 是(免费) | 免费 | | **图标** | Font Awesome 6 免费版 | 否 | 无限制(CDN) | | **字体** | Google Fonts | 否 | 无限制(CDN) | ## 🔑 环境变量 在 `server/` 目录下创建 `.env` 文件: ``` # ─── AI — 4 Groq Keys for Round-Robin Rotation ─────────────────── GROQ_API_KEY_1=gsk_xxxxxxxxxxxxxxxxxxxx GROQ_API_KEY_2=gsk_xxxxxxxxxxxxxxxxxxxx GROQ_API_KEY_3=gsk_xxxxxxxxxxxxxxxxxxxx GROQ_API_KEY_4=gsk_xxxxxxxxxxxxxxxxxxxx # ─── AI Fallback ────────────────────────────────────────────────── GEMINI_API_KEY=AIzaxxxxxxxxxxxxxxxxxxxxxxx # ─── News & Event Data ──────────────────────────────────────────── NEWS_API_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ACLED_API_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx NASA_FIRMS_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx # ─── Map ────────────────────────────────────────────────────────── MAPBOX_TOKEN=pk.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx # ─── Finance ────────────────────────────────────────────────────── EXCHANGE_RATE_KEY=xxxxxxxxxxxxxxxxxxxxxxxx # ─── Cyber ──────────────────────────────────────────────────────── CLOUDFLARE_RADAR_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx # ─── Database ───────────────────────────────────────────────────── MONGODB_URI=mongodb+srv://user:password@cluster.mongodb.net/veridian PORT=5000 ``` | 变量 | 是否必需 | 描述 | |------|----------|------| | `GROQ_API_KEY_1–4` | ✅ | 4 个免费 Groq 密钥 —— 在 console.groq.com 创建 | | `GEMINI_API_KEY` | ⚡ | Google Gemini 降级密钥 | | `NEWS_API_KEY` | ✅ | NewsAPI.org | | `MAPBOX_TOKEN` | ✅ | Mapbox GL JS 访问令牌 | | `MONGODB_URI` | ✅ | MongoDB Atlas 连接字符串 | | `ACLED_API_KEY` | ⚡ | 冲突数据(增强地球仪) | | `EXCHANGE_RATE_KEY` | ⚡ | 外汇面板 | | `CLOUDFLARE_RADAR_KEY` | ⚡ | 网络威胁图层 | ## 🎨 设计系统 VERIDIAN 的设计采用 **军事情报指挥中心** 风格——深海军背景、闪烁的青绿色点缀,以及信息密集型布局传递紧迫感与精确性。 ### 字体 | 字体 | 用途 | |------|------| | **Inter** | 所有 UI 文本——标题、标签、正文、徽章 | | **JetBrains Mono** | 所有数值数据——价格、坐标、分数、时间戳 | ### 配色方案 | 令牌 | 十六进制 | 用途 | |------|----------|------| | `--color-bg` | `#0A0F1E` | 主背景——深空黑 | | `--color-navy` | `#0D1B2A` | 侧边栏 / 次要背景 | | `--color-panel` | `#111827` | 卡片 / 面板背景 | | `--color-surface` | `#1E293B` | 抬升层:下拉菜单、悬停状态 | | `--color-border` | `#1E3A5F` | 所有边框与分割线 | | `--color-cyan` | `#00D4FF` | 主色调——标题、地球发光、活跃状态 | | `--color-green` | `#00FF88` | 买入信号、正值、低严重性 | | `--color-red` | `#EF4444` | 卖出信号、CRITICAL 告警 | | `--color-orange` | `#F97316` | HIGH 告警 | |color-yellow` | `#EAB308` | 持有信号、MEDIUM 告警 | | `--color-gold` | `#F59E0B` | `BREAKING` 徽章 | | `--color-purple` | `#7C3AED` | 网络威胁图层 | ### 面板样式 — 玻璃拟态 ``` .panel { background: rgba(13, 27, 42, 0.85); border: 1px solid #1E3A5F; border-top: 1px solid rgba(0, 212, 255, 0.30); backdrop-filter: blur(12px); border-radius: 12px; box-shadow: 0 0 24px rgba(0, 212, 255, 0.06); } ``` ## 🚀 快速开始 ### 先决条件 - **Node.js** v18+ ([下载](https://nodejs.org/)) - **MongoDB Atlas** 账户 ([注册](https://www.mongodb.com/cloud/atlas)) - 至少 **1 个 Groq API 密钥** ([免费获取](https://console.groq.com)) - **Mapbox** 访问令牌 ([注册](https://www.mapbox.com/)) ### 安装 ``` # 1. Clone the repository git clone https://github.com/yourusername/veridian.git cd veridian # 2. Install server dependencies cd server && npm install # 3. Install client dependencies cd ../client && npm install # 4. Set up environment variables cd ../server cp .env.example .env # Fill in your API keys in .env # 5. Start both services # Terminal 1 — Backend (port 5000) cd server && node index.js # Terminal 2 — Frontend (port 5173) cd client && npm run dev ``` 访问 `http://localhost:5173` —— 地球仪自动加载。无需登录。 ### 使用 Concurrently 运行 ``` # From project root npm run dev # Starts client and server simultaneously ``` ## 🚢 部署 ### 前端 → Vercel 1. 将你的 GitHub 仓库连接到 [Vercel](https://vercel.com) 2. 设置 **根目录** 为 `client` 3. 设置 **构建命令** 为 `npm run build` 4. 设置 **输出目录** 为 `dist` ### 后端 → Railway 1. 在 [Railway](https://railway.app) 上创建新项目 2. 设置 **根目录** 为 `server` 3. 设置 **启动命令** 为 `node index.js` 4. 添加 `.env` 中的所有环境变量 ## 🗄️ 数据库模型 ``` ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ BriefCache │ │ EventCache │ │ SignalHistory │ │─────────────────│ │─────────────────│ │─────────────────│ │ countryName │ │ source │ │ ticker │ │ brief │ │ events[] │ │ signal │ │ stabilityScore │ │ ├─ title │ │ confidence │ │ risks[] │ │ ├─ lat/lon │ │ reasoning │ │ outlook │ │ ├─ severity │ │ geopoliticalCtx │ │ headlines[] │ │ ├─ iso2 │ │ price │ │ createdAt (TTL) │ │ └─ timestamp │ │ createdAt │ │ expiresAt │ │ fetchedAt (TTL) │ │ expiresAt │ └─────────────────┘ └─────────────────┘ └─────────────────┘ 15-min TTL 5-min TTL Per-ticker history ``` ## 🔌 API 路由 | 方法 | 端点 | 描述 | |------|------|------| | `GET` | `/api/events` | 聚合 GDELT + ACLED + USGS 事件(含坐标) | | `GET` | `/api/news` | 多来源新闻订阅 —— 严重性标记 | | `GET` | `/api/finance/:ticker` | 通过 yahoo-finance2 获取实时价格数据 | | `GET` | `/api/flights` | OpenSky Network 军用飞机位置 | | `GET` | `/api/cyber` | 网络威胁数据 —— abuse.ch + URLhaus + Cloudflare Radar | | `POST` | `/api/ai/brief` | AI 国家情报简报(Groq × 4 + Gemini 降级) | | `POST` | `/api/ai/signal` | AI `买入/持有/卖出` 交易信号及推理 | ## 🏆 一句话定位
标签:AI金融信号, Apex, DNS解析, Express, Globe.gl, GNU通用公共许可证, Llama 3.1, MERN栈, MITM代理, MongoDB, Node.js, React, Syscalls, WebGL, 三维地球, 事件驱动, 交易信号, 信号生成, 免费API, 军事动向, 冲突监测, 前端可视化, 后端API, 实时事件聚合, 实时地理政治情报, 开源项目, 抗议追踪, 机器学习, 灾害预警, 独立分析师工具, 网络威胁, 自定义脚本, 零售交易分析