Fintech

Crypto BI

Crypto market intelligence, end to end

Role
Primary author
Period
2022 – 2023
Commits
500+ verified
Repos
4 (backend, 2 UIs, python)

Overview

The crypto business-intelligence platform I built at Wallex, and my most heavily-authored codebase: a .NET analytics backend organized around Microsoft Orleans grains, two Nuxt front-ends (an internal dashboard and a public UI), and a Python service layer that ingests Telegram signal channels via Telethon.

The backend separates a public REST API from a dedicated BI query API, with command/query handlers on both paths. Telegram parser grains normalize channel chatter into structured signals; everything ships to Kubernetes via the manifests and Helm charts kept in-repo.

  • crypto.NET solution — API, BI API, domain, Orleans grains
  • uiNuxt internal dashboard (ag-Grid, Monaco, OIDC)
  • public-uiNuxt public-facing UI
  • python-servicesFlask + Telethon ingestion services

Tech stack

Backend

  • .NET
  • C#
  • Microsoft Orleans
  • CQRS handlers

Front-end

  • Nuxt
  • Vue
  • ag-Grid Enterprise
  • Monaco Editor
  • OIDC

Data & ingestion

  • Python
  • Flask
  • Telethon
  • SQL

Ops

  • Kubernetes
  • Helm
  • Docker

Repository structure

The real solution layout — runtime grains and Telegram parsers are first-class projects beside the domain:

Crypto.sln
src/
├─ Crypto.API                      public REST endpoints
├─ Crypto.BiApi                    BI query API
├─ Crypto.Handlers                 core command/query handlers
├─ Crypto.Bi.Handlers              BI-side handlers
├─ Crypto.Domain                   domain model
├─ Crypto.Infra                    persistence & integrations
├─ Crypto.Runtime.Grains           Orleans actors (per-symbol state)
├─ Crypto.Runtime.Interfaces       grain contracts
└─ Crypto.Runtime.TelegramParsers  Telegram channel ingestion
tests/     domain + grain test projects
kubernetes/  deployment manifests
database_query/

Design patterns

  • Actor model (Orleans)

    Crypto.Runtime.Grains holds hot per-symbol/per-channel state as virtual actors, with contracts isolated in Runtime.Interfaces.

  • CQRS-style handlers

    Separate Crypto.Handlers and Crypto.Bi.Handlers projects split the write path from BI reads, each behind its own API head.

  • Layered architecture

    API → handlers → domain → infra; the domain project has its own test suite.

  • Anti-corruption ingestion

    Telethon parsers normalize free-form Telegram signals into domain events before they touch the model.

System design

INGESTIONCORE (.NET)APISCLIENTSMTProtoTelegram channelssignal chatterpython-servicesFlask + TelethonTelegramParsersnormalize → eventsOrleans grainsper-symbol actorsHandlers / Bi.HandlersCQRS splitCrypto.APIRESTCrypto.BiApiBI queriesNuxt dashboardag-Grid · OIDCPublic UINuxt