Auguria
Market analysis in Spanish

Summary
Market dashboards, a factor screener across more than 1,000 assets, four AI agents and a daily closing briefing by web and email. A deterministic filter blocks any buy or sell wording. I built it on my own: about 1,070 commits in five months and around 900 tests.
Next.js, Supabase and a FastAPI service with self-hosted FinBERT, over a cascade of six LLM providers.
What it does
Auguria brings global markets together in one place, in Spanish, and explains them in plain language. It never tells anyone to buy or sell.
- Markets: the session handover from Asia to Europe to the US, heat maps of the S&P 500 and the IBEX 35, and market breadth.
- Assets: candlestick charts with indicators, dividends, splits, insider trades, the options chain and price alerts.
- Macro and screener: FRED and Eurostat data, the yield curve, COT positioning, and a factor screener over more than 1,000 assets (value, quality, solvency and momentum).
- AI: news, technical, fundamental and macro agents, plus a closing briefing published on the web and sent by email.
How it's built
Market data is never fetched on a user's visit. A scheduled job fills a cache in Postgres through a Python data service, and the pages only read from it. Every figure declares whether it is official, derived or a proxy, and how fresh it really is.
Every call to a language model goes through one function: a fixed cascade of six providers with a bounded queue, retries and health checks. A truncated answer counts as a failure and is never cached. News sentiment and classification run on my own FinBERT and mDeBERTa services; if they go down, the feed keeps working without tags. A deterministic filter rewrites any buy or sell wording in the AI output, and the legal notice is a fixed string in the code that never goes through the model.
Where it stands
It is live at auguria.es, on seven services on Railway. I built it on my own: about 1,070 commits between May and October 2026, around 900 tests and CI on every commit. An encrypted daily backup is checked by an automatic restore drill.
The rule I care most about: a failure must never look like missing data. Every route returns the same error fields, so a broken source shows up as broken, not as an empty chart.
Figures



