New Forecasts: extend your curves, seasons included

eodia insights

All your databases. One source of truth.

Ask PostgreSQL, MongoDB and Snowflake a question in a single query. Everyone sees only what they’re allowed to see — even in free-form SQL.

  • Open source, AGPL-3.0
  • AI assistant and forecasts
  • Permissions enforced by Trino

A question, without a line of SQL.

Pick a table, filter, summarize: the chart draws itself as you click.

Or all the SQL you want.

A Trino editor with autocomplete, variables and formatting. Join two databases like two tables.

Ask. It answers, chart in hand.

The assistant searches your schema, runs the query under your permissions and shows you the result — to keep as a question.

It all comes together on a dashboard.

Cards, filters that drive the whole page, auto-refresh — and a link to share.

And what comes next.

A curve goes on in one click: the trend, the season and a margin of uncertainty, computed in your browser.

The demo

eodia insights, in one minute. in four minutes.

Questions, charts, SQL, the AI assistant, dashboards and permissions: the essentials, narrated and set to music.

From the first question to the shared dashboard, and the same data seen by two people: the full guided tour.

The films are narrated in French, with English subtitles.

Chapters

AI Assistant

Talk to your data. It answers in charts.

A screen to talk with your data: the assistant finds the tables, writes the SQL, runs it with your permissions and shows you the answer as interactive charts. Every conversation is kept, for you alone.

claude-sonnet-5-5

What is the ticket resolution time by reason, for Premium customers?

Thinking…

  • Searching the schema · 2 tables
  • Reading the table · Tickets
  • Running the query · 6 rows
  • Preparing the chart

Average resolution time

Premium customers · last 90 days

Refund 61 h
Defective product 54 h
Delivery 47 h
Billing 38 h
Return 35 h
Customer account 29 h

6 rows · with your permissions Save as question ›

Refunds take the longest to resolve: 61 h on average, twice as long as account questions. Shall I compare with Standard customers?

Customer support

Anthropic, OpenAI, Mistral or any OpenAI-compatible service — including one you host.

Discover the assistant And the copilot

Dashboards

Today’s numbers, up to date.

Drag questions onto a grid, add filters that drive every card, tabs, text. The dashboard refreshes itself; the cache makes it instant.

Linked filters

One period, one region: every card follows, whatever its source.

Refreshed, cached

Auto-refresh, a result cache, and warm-up by the worker.

Shared

A public link, a members-only link, or a signed embed in your product.

Build a dashboard

NewForecasts

What happened. And what’s next.

One click extends a line, an area or bars by 3, 6 or 12 periods. eodia insights recognises the season, draws the trend in green dashes and tells you how far to trust it.

The season, recognised

Holt-Winters as soon as the series covers two seasons — 12 months, 4 quarters, 7 days; otherwise a smoothed trend, or a straight line.

An honest interval

The 80 % range widens with the horizon: you see at a glance what is likely, and what is a bet.

Wherever your charts are

Lines, areas, bars and combos, in questions and dashboards — and all the way into Claude, through the MCP server.

All about forecasts

Themes and PDF

In your colors, down to the PDF.

Fonts, colors, cards, chart palette and logo: apply a theme to a folder and everything in it wears it — subfolders, questions, dashboards, shared links and their PDF prints.

All about themes

Permissions that hold

Same query. Everyone their own data.

Before every statement, Trino asks eodia insights what the person can read. Rows from other regions vanish, emails get masked — even in free-form SQL.

View as

Trino → eodia insights

  • Access to boutique.clients: allowed
  • No row filter
  • No column mask
  • Access to boutique.clients: allowed
  • Row filter: region = ’Bretagne’
  • Mask: email
region = {{user.region}}

Rows

Per-group rules, based on the person’s attributes. A missing attribute closes access — it never opens it.

Columns

Hidden, they no longer exist; masked, Trino replaces the value. In questions, exports, the API.

Everywhere

Editor, free-form SQL, cards, copilot, API, MCP: one decision point, no back door.

All about permissions

One engine

Seven databases. One query.

Every query goes through Trino: the visual editor, SQL, cards, the copilot, the API and MCP. A PostgreSQL table and a MongoDB collection join like two tables in the same database.

select c.region,
       avg(o.montant_total) as panier_moyen,
       count(t.ticket_id)   as tickets
  from boutique.public.commandes o
  join boutique.public.clients c on c.id = o.client_id
  left join support.support.tickets t on t.client_id = c.id
 group by c.region

One dialect

Trino SQL everywhere: in the editor, in questions, in what the copilot writes.

Added on the fly

A database connected from the UI becomes a Trino catalog — no restart, nothing.

Encrypted secrets

Source credentials are encrypted with AES-256-GCM; Trino writes nothing to disk.

Connect a source

What’s new

Charts that tell you something.

Races to replay time, bubbles and treemaps for shares of shares, a calendar, key figures with their sparkline — in an interface that speaks your language and updates before your eyes.

API and MCP

Your metrics, in Claude.

The MCP server gives Claude — or any agent — the tools to explore your data: search the schema, query a metric, run a question. The token carries its owner’s permissions, not one more.

The MCP server’s tools

  • list_datasources
  • search_schema
  • describe_table
  • list_metrics
  • query_metric
  • list_questions
  • run_question
  • run_sql
  • get_dashboard
  • show_chart
How many orders did Bretagne place in September, and how does that compare to August?
eodia-insights · query_metric orders · region = Bretagne · by month
1,184 orders in September, versus 1,027 in August: +15.3%. The region’s best month of the year.
# Exécuter une question enregistrée, sous les droits du jeton
curl -X POST https://insights.exemple.fr/api/v1/questions/$QUESTION_ID/run \
  -H "Authorization: Bearer eoi_…" \
  -H "Content-Type: application/json" -d '{}'

# Toute l’API, décrite en OpenAPI 3.1
curl https://insights.exemple.fr/api/v1/openapi.json
// Dans votre application : signez, puis intégrez.
const token = jwt.sign({
  resource: { dashboard: DASHBOARD_ID },
  user: { id: 'client-42', attributes: { region: 'Bretagne' } },
}, secret, { algorithm: 'HS256', keyid: kid, expiresIn: '10m' });

<iframe src="https://insights.exemple.fr/embed?token=${token}">

And everything you expect from a BI tool.

What gets a team to adopt it — and lets an admin sleep at night.

On your servers

Your data never leaves your server.

One Docker image, one Compose file: PostgreSQL for the catalog, Trino, the app, and Caddy for HTTPS. The first screen creates the admin account.

  • Automatic HTTPS with Caddy
  • One image, five roles: api, web, worker, mcp, all
  • Sealed, replayable catalog migrations

Frequently asked questions

How is it different from Metabase?

The spirit is the same: questions, models, dashboards. The difference is underneath: every query goes through Trino, which joins your databases together and enforces row and column permissions itself — free-form SQL included.

Do I need to know how to run Trino?

No. eodia insights creates and recreates the Trino catalogs from your sources on its own; Trino keeps no state. A single container is enough to get started.

Can free-form SQL bypass permissions?

No. Permissions aren’t enforced by the interface but by Trino, which checks with eodia insights before every statement: table access, row filters, column masks. Native SQL, which would bypass Trino, is reserved for those with no restriction on the source.

Can I trust the forecasts?

As much as the series they extend. eodia insights picks the method from the data — Holt-Winters when the series covers two seasons, a smoothed trend otherwise — and surrounds the forecast with an 80 % interval that widens with the horizon. It does not guess what the data does not hold: a new offer, a crisis.

MongoDB, really?

Yes: a collection reads like a table, and joins a PostgreSQL or Snowflake table in the same query. Subdocuments come through as structs.

Does my data go to an AI provider?

Only if you enable AI, with the provider you choose — Anthropic, OpenAI, Mistral or an OpenAI-compatible service, including one you host. Without a key, there is no assistant and no copilot. What the model reads — schema, descriptions, query results — goes through your permissions; a quota per person per hour limits usage.

Can the AI assistant see or change more than I can?

No. Every query it writes runs in Trino under your identity: your tables, your masked columns, your row rules. It changes nothing — it suggests, you save. Its conversations are kept for you alone, and you can delete them.

Can I use my company’s brand?

Yes. An administrator creates a theme — fonts, colors, cards, chart palette, logo, PDF layout — and applies it to a folder: subfolders, questions, dashboards, shared links and PDF exports wear it. A dashboard can have its own.

Is it really free?

Yes, under the AGPL-3.0-or-later license: install it, use it and modify it freely. If you offer a modified version as an online service, you publish your changes.

Plug in your databases. Ask your questions.

One command to get started, a built-in demo to try it out, and the docs for everything else.