Geopolitical intelligence demo — a full-stack dashboard that turns news and market data into regional risk scores, a live 3D globe, and AI-assisted trading signals.
Portfolio / demo project. Not a production trading or intelligence product.
| Surface | Description |
|---|---|
| Earth Pulse | Interactive 3D globe with country risk coloring and event arcs |
| Geo Map | 2D choropleth map with asset charts and sector exposure |
| AI Signals | Rule-based trading signals with trade setup, reasoning, and reliability |
| ML pipeline | RSS ingest → sentiment → classification → GTI → narratives → summary |
| Layer | Tech |
|---|---|
| Frontend | Next.js 14, TypeScript, Tailwind CSS, globe.gl, Framer Motion |
| Backend | FastAPI, SQLAlchemy (async), APScheduler |
| ML | DistilBERT, BART-MNLI, LightGBM, BERTopic |
| Database | PostgreSQL 16 |
| CI | GitHub Actions (lint + build + import checks) |
GeoPulse/
├── frontend/ # Next.js dashboard
├── backend/ # FastAPI API + ML services
├── data/schema.sql # Postgres schema (Docker init)
├── .github/workflows/ # CI on every push / PR
├── docker-compose.yml
├── Makefile
└── LICENSE
- Node.js 20+
- Python 3.11+ (3.13 recommended)
- Docker (for local Postgres) — optional if you already have Postgres
git clone https://github.com/guptaom31619-prog/GeoPulse.git
cd GeoPulse
cp .env.example backend/.env
make install
make dev-db # starts Postgres via Docker
make dev # backend :8000 + frontend :3000| Service | URL |
|---|---|
| Frontend | http://localhost:3000 |
| Backend API | http://localhost:8000 |
| API docs | http://localhost:8000/docs |
docker compose up --buildmake help # list all targets
make install # Python venv + npm install
make dev # run API + UI
make lint # lint backend + frontend
make build # production frontend build
make check # CI-style validation locally
make docker-up # compose up
make docker-down # compose down| Method | Endpoint | Description |
|---|---|---|
| GET | /health |
Health check |
| GET | /news/latest |
Latest articles |
| GET | /events/latest |
Latest ML-processed events |
| GET | /risk/global |
Global + regional GTI |
| GET | /predictions/latest |
Macro risk predictions |
| GET | /narratives/latest |
Detected narratives |
| GET | /summary/latest |
Intelligence summary |
| GET | /market/prices |
Live market prices |
| GET | /market/signals |
AI trading signals |
| GET | /globe/data |
Globe visualization payload |
| Variable | Required | Description |
|---|---|---|
DATABASE_URL |
Yes | postgresql+asyncpg://... connection string |
ENVIRONMENT |
No | development (default) or production |
NEXT_PUBLIC_API_URL |
No | Frontend API base (default http://localhost:8000/api/v1) |
Copy .env.example → backend/.env. Never commit real credentials.
On every push to main / develop and on pull requests:
- Frontend —
npm ci→next lint→next build - Backend — install deps → syntax check → import all modules → load FastAPI app
MIT — see LICENSE.