TS Financial Intelligence
Market, macro and housing data platform
In active development
- Python
- FastAPI
- SQLAlchemy
- Alembic
- PostgreSQL
- SQLite
- NumPy
- React
- TypeScript
- pytest
- Playwright
Private repository. I can walk through the code on request.
A research terminal that collects market prices, official statistics, central-bank releases and Czech housing data from more than fifteen sources into one database, then serves it through a FastAPI backend and a React interface. Every figure keeps its source, date and freshness.
- sources
- Public APIs
- CSV and SDMX
- RSS feeds
- adapters
- Normalised records
- Rate limiting
- validation
- Duplicates
- Future dates
- Invalid values
- storage
- SQLAlchemy
- Alembic
- SQLite or PostgreSQL
- serving
- FastAPI services
- React + TypeScript
What I built
Market prices, macroeconomic statistics and housing data live in many places with different formats, schedules and licences. Comparing them means reconciling units, dates and currencies by hand, and it is easy to lose track of where a number came from or whether it is still current.
- Provider adapters for public sources including ČNB, ECB, US Treasury, Bundesbank, FRED, Eurostat, ČSÚ, SEC EDGAR, the Prague Stock Exchange and CoinGecko, plus keyed sources such as Twelve Data and ČNB ARAD.
- An ingestion pipeline that validates each batch before storing it and logs every run.
- Analytics for comparing up to eight instruments: rebased performance, risk statistics, rolling correlation and same-day currency conversion.
- Czech real-estate views: regional price statistics, ARAD housing-loan data, Realitní pes listing search and an investment calculator.
- Google OAuth accounts with per-user watchlists, saved comparisons and research notes.
Engineering decisions
- Provenance on every number
- Each series carries its source, observation date, retrieval time and a staleness flag computed from its update cadence. The interface shows them next to the figure.
- Validation before persistence
- Duplicates, future dates, non-finite values, non-positive prices and high-below-low bars are rejected and counted by reason before anything reaches the database.
- Quota-aware on-demand requests
- Property listings come from an API with a small monthly quota, so they are fetched only on request, cached, deduplicated with a per-key lock and retried with bounded backoff.
- Tests that never call the network
- Provider parsers are tested against recorded responses. CI runs the backend suite on both SQLite and PostgreSQL, then type-checks, lints, tests and builds the frontend.
In the repository 150 backend tests, 7 Alembic migrations and a GitHub Actions workflow covering ruff, pytest on SQLite and PostgreSQL, TypeScript, ESLint, Vitest and a production build.
A research and learning tool. It does not provide investment advice.