Phase 13: web dashboard at /_bridge/dashboard

Single-page club management UI served by the bridge. The Core URL is
injected server-side so client JS calls Core directly without routing
through the proxy. Vanilla HTML/CSS/JS, dark theme matching admin.html.

Sections: Club (name/manager/coins/stats edit), Collection (filterable
card grid with stat bars + chemistry/training pills), Packs (open with
modal, history), Objectives (progress bars + one-click claim), Division
(W/D/L record, season progress, rivals weekly claim), FUT Champions
(current session with in-browser match simulation, claim, history),
Notifications (badge count in nav).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
funman300
2026-06-25 17:18:10 -07:00
parent b7da8b6e83
commit eae3e72fd9
4 changed files with 817 additions and 1 deletions
+13
View File
@@ -46,6 +46,19 @@ pub async fn get_cert(State(state): State<ProxyState>) -> Response {
}
}
/// Club management dashboard served at `/_bridge/dashboard`.
///
/// Injects the Core URL so client-side JS can call Core directly without going through the proxy.
pub async fn get_dashboard(State(state): State<ProxyState>) -> Response {
let template = include_str!("../dashboard.html");
let html = template.replace("{{CORE_URL}}", &state.config.core_url);
Response::builder()
.status(StatusCode::OK)
.header(header::CONTENT_TYPE, "text/html; charset=utf-8")
.body(axum::body::Body::from(html))
.unwrap()
}
/// HTML setup guide for connecting FIFA 23 to OpenFUT Bridge.
pub async fn get_guide(State(state): State<ProxyState>) -> Html<String> {
let host = state