🎮 HLStatsX.NET

1 — Multi-Database Platform Support (MSSQL & PostgreSQL)

Current State

All four projects (Web, Infrastructure, Daemon, Awards) are coupled to MySQL via Pomelo.EntityFrameworkCore.MySql 9.0.0. EF Core is pinned at 9.x because Pomelo has no 10.x release yet. All database-specific work lives in HLStatsX.NET.Infrastructure.

MySQL-specific blockers

Location Issue Affects
All Program.cs files UseMySql(connStr, ServerVersion.AutoDetect(...)) Web, Daemon, Awards
AdminRepository.cs — all raw SQL Backtick identifier quoting `tableName` All raw SQL statements
AdminRepository.cs:722–723 OPTIMIZE TABLE / ANALYZE TABLE — MySQL-only No MSSQL equivalent; PostgreSQL uses VACUUM ANALYZE
AdminRepository.cs:831–832 DELETE FROM `t` USING `t` INNER JOIN … — MySQL multi-table delete Needs rewriting as subquery / CTE for other providers
AdminRepository.cs:870–871 DELETE c FROM … LEFT JOIN … — MySQL alias delete MSSQL compatible; needs rewrite for PostgreSQL
AdminRepository.cs:963–1001 ALTER DATABASE … CHARACTER SET … COLLATE … Entire Reset DB Collations feature is MySQL-only
appsettings.json (all projects) CharSet=utf8mb4 connection string parameter MySQL-only parameter
All .csproj files Pomelo.EntityFrameworkCore.MySql package reference All four projects

Implementation steps

Estimated total effort — Multi-database support 41–51 hours

2 — Localisation (French, Spanish, German, Russian)

Current State

No localisation infrastructure exists. All ~1,700 user-visible strings are hardcoded English across 121 Razor view files, 4 layout files, and scattered controller TempData/ViewData calls. There are zero .resx files, no IStringLocalizer usage, and no culture middleware.

String volume by area

AreaFiles~Strings
Admin panel52 views400–500
Public leaderboards & profiles69 views750–900
Shared layouts & partials4 layouts + partials100–120
Controller messages (TempData)50–80
Total121 + layouts~1,300–1,600

Implementation phases

Translation effort by language

LanguageMachine passReviewTotal
🇫🇷 French~4 hrs~12–16 hrs~16–20 hrs
🇪🇸 Spanish~4 hrs~12–16 hrs~16–20 hrs
🇩🇪 German~4 hrs~14–18 hrs~18–22 hrs
🇷🇺 Russian~4 hrs~16–20 hrs~20–24 hrs
Total~16 hrs~54–70 hrs~70–86 hrs
Russian pluralisation — Russian has three plural forms (1, 2–4, 5+). Any count-bearing string (kills, deaths, sessions, etc.) requires custom plural rule helpers rather than a simple IStringLocalizer key lookup.

Phase summary

PhaseHours
1 — Infrastructure20–25
2 — View string extraction80–100
3 — Controller & service strings15–20
4 — Translations (4 languages)70–86
5 — Database-driven content10–15
6 — Testing & QA15–20
Minimum viable path: Infrastructure + view extraction + one language ≈ 3–4 weeks.
Full four-language release: all phases + QA ≈ 6–7 weeks.
Estimated total effort — Full localisation (4 languages) 210–266 hours

3 — Mobile-Responsive Site Work in Progress

Current State

Mobile responsiveness is actively in progress. The home page, server pages, and public leaderboard and list pages have been updated for small screens. Profile pages, the admin panel, and some detail views still use fixed-width layouts that require horizontal scrolling on mobile.

Areas

Area Status Notes
Home / server pages✅ DoneResponsive layout implemented
Public leaderboards & lists✅ DoneResponsive layout implemented
Maps — detail view✅ DoneThumbnail hidden on mobile
Player / clan profile pages⚠️ PartialTab layout and stat tables need breakpoints
Admin panel❌ Not startedFixed-width forms; admin use on desktop assumed
In-game pages❌ Not startedLow priority — typically displayed inside game overlays

Implementation steps

Estimated total effort — Mobile responsiveness 28–40 hours