How asridk/eurodata works
Eurodata is a European data-intelligence platform: official-source statistics and curated events are ingested into DuckDB, then exposed through a Python API and exploratory frontends. Its principal refresh workflow fetches registered sources, loads validated records, rebuilds the structural graph, runs blocking quality checks, and optionally exports Parquet. Users explore series, country profiles, events, correlations and propagation through Streamlit or the web API; the web app also offers an AI analyst. Edges follow the README and shown references; unsampled frontend/API internals are represented conservatively.
Main entry points: ingestion.py Refresh orchestration · db.py DuckDB dataset · api.py Python data API · seed.py Reference seeding
Components 23
Data foundation
- DuckDB dataset
src/eurodata/db.py - Reference seeding
src/eurodata/model/seed.py - Indicator catalog
src/eurodata/reference/catalog.py - Geographic references
src/eurodata/reference/countries.py - Curated events
src/eurodata/reference/events.py
Refresh pipeline
- Data providers
src/eurodata/sources/registry.py - Source fetchers
src/eurodata/sources/base.py - Ingestion loader
src/eurodata/ingest/pipeline.py - Record validation
src/eurodata/ingest/validate.py - Quality contracts
src/eurodata/ingest/quality.py - Refresh orchestration
flows/ingestion.py - Parquet release
src/eurodata/export/release.py
Analysis and API
- Structural graph
src/eurodata/graph/build.py - Correlations
src/eurodata/graph/correlate.py - Propagation analysis
src/eurodata/graph/propagate.py - Python data API
src/eurodata/api.py
Web experience
- FastAPI service
web/backend/main.py - AI analyst
web/backend/chat.py - Analyst tools
web/backend/tools.py - Next.js explorer
web/frontend/src/app/explore/page.tsx
Streamlit dashboard
- Streamlit dashboard
app/streamlit_app.py - Dashboard components
app/components.py
Other components
- Data explorer
Connections 28
- Data providers → Source fetchers: registers
src/eurodata/sources/registry.py - Refresh orchestration → Data providers: enumerates
flows/ingestion.py - Refresh orchestration → Ingestion loader: runs
flows/ingestion.py - Ingestion loader → Source fetchers: fetches
src/eurodata/ingest/pipeline.py - Ingestion loader → Record validation: validates
src/eurodata/ingest/pipeline.py - Ingestion loader → DuckDB dataset: loads records
src/eurodata/ingest/pipeline.py - Reference seeding → Geographic references: reads
src/eurodata/model/seed.py - Reference seeding → Indicator catalog: reads
src/eurodata/model/seed.py - Reference seeding → Curated events: reads
src/eurodata/model/seed.py - Reference seeding → DuckDB dataset: seeds
- Refresh orchestration → Structural graph: builds
flows/ingestion.py - Structural graph → Correlations: uses
src/eurodata/graph/build.py - Refresh orchestration → Quality contracts: checks
flows/ingestion.py - Quality contracts → DuckDB dataset: checks data
README.md - Refresh orchestration → Parquet release: exports
flows/ingestion.py - Refresh orchestration → DuckDB dataset: connects
flows/ingestion.py - Python data API → DuckDB dataset: queries
src/eurodata/api.py - Python data API → Propagation analysis: delegates
src/eurodata/api.py - Data explorer → Streamlit dashboard: explores
README.md - Streamlit dashboard → Dashboard components: uses
app/streamlit_app.py - Streamlit dashboard → Python data API: queries
app/streamlit_app.py - Streamlit dashboard → DuckDB dataset: opens
app/streamlit_app.py - Data explorer → Next.js explorer: explores
README.md - Next.js explorer → FastAPI service: requests data
README.md - FastAPI service → Python data API: wraps
README.md - FastAPI service → AI analyst: routes chat
web/backend/main.py - AI analyst → Analyst tools: executes
web/backend/chat.py - Analyst tools → Python data API: calls
web/backend/tools.py