I've been running two AI prediction platforms on .NET 8 for the past 2 years now, and wanted to share what the stack looks like and what I've learned along the way.
The Projects
1X2.TV (https://1x2.tv) — football match predictions. The system analyzes 500+ matches daily across 100+ leagues. It predicts match results, both teams to score, over/under goals, correct score — basically all the major betting markets. Models retrain continuously on fresh match data.
AI Stock Predictions (https://ai-stock-predictions.com) — stock market forecasts for S&P 500, NASDAQ, NYSE. Same ML infrastructure, different domain. Models process 50+ features per stock: price action, volume patterns, sector momentum, sentiment signals.
Both support 30+ languages and have native iOS/Android/Windows apps.
Architecture
Clean Architecture with Domain → Application → Infrastructure layers.
- Frontend: Blazor Server with MudBlazor components
- Backend: ASP.NET Core, MediatR (CQRS pattern), FluentValidation
- ML: ML.NET gradient boosting models with daily retraining pipeline
- Data: EF Core + MSSQL, Selenium/Playwright for data collection
- Real-time: SignalR for notifications and live updates
- Auth: JWT with refresh tokens
- Hosting: Windows Server + IIS
- i18n: 30+ languages via server-side .resx resources + client JSON files
What Worked Well
Blazor Server turned out great for this kind of project. Fast development cycle, real server-side rendering, and MudBlazor gives you a solid component library out of the box. The SignalR connection model means you get real-time updates almost for free.
ML.NET is honestly underrated. For gradient boosting classification and regression tasks it's solid, and the integration with the rest of the .NET ecosystem is seamless. Retraining daily is just a background service that runs on a schedule.
EF Core with the Specification pattern made complex queries manageable. Migrations just work. The combination with MSSQL has been rock-solid in production.
Pain Points
Blazor Server memory — with many concurrent users, each holding a SignalR circuit, memory adds up fast. Had to be careful with component lifecycle and disposal.
Selenium/Playwright stability — scraping is inherently fragile. Sites change layouts, add captchas, go down. Built a retry/fallback system but it still needs regular maintenance.
EF Core complex LINQ — some queries that looked simple in C# generated terrible SQL. Had to drop to raw SQL in a few hot paths.
Numbers
The football platform processes around 500 matches per day across 100+ leagues. The stock platform covers all S&P 500 and NASDAQ 100 stocks daily. Both run on a single Windows Server instance.
Stack Summary
| Layer | Tech |
|---|---|
| Frontend | Blazor Server, MudBlazor |
| Backend | ASP.NET Core 8, MediatR, FluentValidation |
| ML | ML.NET (gradient boosting) |
| Database | MSSQL + EF Core 7 |
| Scraping | Selenium, Playwright, AngleSharp |
| Real-time | SignalR |
| Hosting | Windows Server, IIS |
| Apps | iOS, Android, Windows (native) |
Happy to answer questions about any part of the stack or architecture decisions. What would you do differently?
Top comments (0)