$ show jortilles/EDA
EDA (Edalitics) is a full-stack, self-hosted business intelligence and dashboarding platform. It is an application rather than a data-research repository, though its core value is data exploration: users connect multiple database systems, generate data models, build interactive dashboards with D3/Leaflet/PrimeNG widgets, define KPIs and alerts, schedule PDF/email reports, and query data through either a no-code visual editor or raw SQL. The backend is an Express + TypeScript REST API backed by MongoDB for metadata, with a connection abstraction layer covering PostgreSQL, MySQL, Oracle, SQL Server, BigQuery, Snowflake, ClickHouse, Vertica, DuckDB, MongoDB, and JSON web services. The frontend is an Angular 17+ standalone-component SPA with gridster-based dashboard panels, a large D3 chart family, cross-tables, maps, and an AI assistant that uses OpenAI, Anthropic, Bedrock, and Qwen providers for natural-language querying, chart suggestions, and automated dashboard generation. Datasource plugins for Google Analytics 4, Odoo, and Holded download data into DuckDB-backed models, and forecasting is available through ARIMA and TensorFlow.js services.
The LLM identified 5 files worth highlighting for reuse:
A hash-based query cache that computes repeatable hashes of query inputs, persists results to MongoDB, applies TTL and scheduled refresh logic, and normalizes Oracle/MySQL numeric values to avoid string-corrupted aggregates. It is a self-contained pattern for building a resilient, reusable database-query cache layer in any Node.js backend.
A self-contained ARIMA forecasting service with automatic model configuration selection, validation splitting, and a linear regression fallback when ARIMA is not suitable. It demonstrates a pragmatic, production-oriented approach to univariate time-series prediction and could be extracted for use in other analytics applications.
A unified N-axis cross-table aggregation engine that replaces legacy pivot implementations. It uses sparse Y-tuple computation with a non-printable separator to avoid cartesian column explosions and includes preflight column-count checks to prevent browser crashes. This is a strong, reusable data-aggregation pattern for pivot/cross-table behavior in web applications.
A clean factory abstraction over multiple LLM providers (OpenAI, Anthropic, Bedrock, Qwen), exposing a common provider interface for chat and tool calling. It demonstrates a loosely coupled way to swap AI backends, which can be lifted into other projects needing multi-provider LLM integration.
A compact collection of reusable D3 formatting helpers used across the chart component suite, including number/axis formatting, label truncation, and measure-text-width calculations. It is a dependency-light, self-contained utility module that can be dropped into any D3/TypeScript visualization project.