NullRoutedSec/info_sec_news
GitHub: NullRoutedSec/info_sec_news
Stars: 0 | Forks: 0
# INFOSEC_NEWS
**🔗 Live: https://info-sec-news.vercel.app**
Built for security professionals and enthusiasts who want their threat intelligence served like a SOC briefing — not a generic news feed.
## What It Does
- **Aggregates** cybersec news from 6 sources (Krebs on Security, BleepingComputer, The Hacker News, Dark Reading, r/netsec, r/cybersecurity)
- **AI-enriches** every article with a TL;DR summary, threat score (1-100), relevance score, category, and country detection
- **Tracks CVEs** from NIST NVD and flags actively-exploited vulnerabilities from CISA's KEV catalog
- **Generates daily intelligence briefings** in CISO-style intel-report format
- **Visualizes the global threat landscape** on an animated world map with pulsing blips per country, color-coded by severity
- **CRT terminal aesthetic** with phosphor green text, scanlines, glitch effects, and blinking cursors — toggleable to a clean corporate mode
## Tech Stack
| Layer | Choice |
|---------------|------------------------------------------|
| Framework | Next.js 16 (App Router) |
| Language | TypeScript |
| Styling | Tailwind CSS v4 |
| Database | Supabase (Postgres) |
| AI | Google Gemini API (free tier) |
| Visualization | D3.js + world-atlas topojson |
| Hosting | Vercel (with built-in cron) |
## Architecture
RSS / Reddit feeds ──┐
├──> /api/ingest ──> Supabase (articles)
│ │
NIST NVD ────────────┤ ├──> /api/enrich ──> Gemini AI
CISA KEV ────────────┤ │ (summary, scores, country)
└──> /api/cve ──> Supabase │
(cves) ├──> /api/briefing
│ (daily intel report)
▼
Next.js pages (SSR + ISR)
- **API routes are write-only pipelines** — triggered by Vercel Cron, never called from the UI
- **Pages read directly from Supabase** in Server Components
- **Single AI call per article** returns summary + scores + category + country in one structured request
## Project Structure
src/
├── app/ # Pages and API route handlers
│ ├── page.tsx # Homepage (world map + paginated feed)
│ ├── cves/ # CVE Spotlight
│ ├── briefing/ # Daily intelligence briefing
│ └── api/
│ ├── ingest/ # RSS + Reddit ingestion (cron)
│ ├── enrich/ # AI enrichment (cron)
│ ├── cve/ # NVD + KEV ingestion (cron)
│ └── briefing/ # Daily briefing generation (cron)
├── components/
│ ├── crt/ # CRT aesthetic primitives
│ ├── feed/ # Article cards, list, filters, pagination
│ ├── cve/ # CVE cards, severity badges
│ ├── viz/ # WorldThreatMap (D3)
│ ├── briefing/ # Briefing renderer
│ └── layout/ # Nav, theme toggle
├── lib/
│ ├── supabase/ # Browser, server, admin clients
│ ├── feeds/ # RSS parser, Reddit fetcher, source registry
│ ├── ai/ # Gemini client, enrichment, briefing prompts
│ └── cve/ # NVD + KEV API clients
└── styles/
└── globals.css # Tailwind v4 theme + CRT animations
## Running Locally
### Prerequisites
- Node.js 20+
- A free Supabase project — https://supabase.com
- A free Google Gemini API key — https://aistudio.google.com/app/apikey
### Setup
# 1. Clone and install
git clone https://github.com/NullRoutedSec/info_sec_news.git
cd info_sec_news
npm install
# 2. Configure environment variables
cp .env.local.example .env.local
# Then edit .env.local with your Supabase + Gemini credentials
# 3. Run the database migrations in your Supabase SQL Editor
# See supabase/migrations/ for the SQL files
# 4. Start the dev server
npm run dev
### Trigger the data pipelines manually
# Ingest articles from RSS + Reddit
curl -H "Authorization: Bearer $CRON_SECRET" http://localhost:3000/api/ingest
# Enrich articles with AI (paced for free-tier limits)
curl -H "Authorization: Bearer $CRON_SECRET" http://localhost:3000/api/enrich
# Pull CVEs from NIST + CISA KEV
curl -H "Authorization: Bearer $CRON_SECRET" http://localhost:3000/api/cve
# Generate today's briefing
curl -H "Authorization: Bearer $CRON_SECRET" http://localhost:3000/api/briefing
## Environment Variables
| Variable | Purpose |
|-----------------------------------------|------------------------------------------|
| `NEXT_PUBLIC_SUPABASE_URL` | Supabase project URL |
| `NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY` | Supabase publishable (anon) key |
| `GEMINI_API_KEY` | Google Gemini API key for AI enrichment |
| `CRON_SECRET` | Bearer token protecting the cron routes |
## Deployment
Deploys cleanly to Vercel. The `vercel.json` file defines four cron jobs:
| Path | Schedule | What it does |
|-----------------|-------------------------|-----------------------------------------|
| `/api/ingest` | Every 2 hours | Pulls fresh articles from all sources |
| `/api/enrich` | Every 2 hours (offset) | AI-enriches new articles |
| `/api/cve` | Daily at 06:00 UTC | Pulls CVEs from NIST + CISA KEV |
| `/api/briefing` | Daily at 08:00 UTC | Generates the daily intelligence report |
## Design Notes
- **The CRT aesthetic is CSS overlays, not per-component.** Scanlines, flicker, and phosphor glow are global effects toggled by theme — components only consume design tokens.
- **No red.** The palette intentionally avoids red for severity. Real green-phosphor terminals never had red, so threats escalate through green → yellow → amber → orange. Cleaner and more authentic.
- **URL is the dedup key** for article ingestion — simple, reliable, handles cross-source overlap.
- **AI runs in batches with explicit pacing** to stay safely under Gemini's free-tier rate limits.
## License
MIT — feel free to learn from it, fork it, or build on it.
标签:自动化攻击