Matches — difficulty selector, generate opponent (shows AI squad rating
and formation), quick-score buttons (3-0 / 1-1 / 0-2), submit custom
score via POST /matches/result, inline reward display (coins, XP,
objective triggers, season points), live match history list.
Pack Store — lists all purchasable definitions from GET /packs/store
(name, description, cost, card count) with one-click Buy that calls
POST /packs/buy; coin balance refreshes after purchase.
SBC — renders all challenges with requirements as pills (min OVR,
required nations/leagues/clubs, same-club counts), card picker
(select from owned collection, click pill to remove), Submit fires
POST /sbc/submit and shows reward or validation failures; cards
re-loaded from Core after a successful submission.
Statistics — career stat grid (matches, W/D/L, win rate, goals, coin
totals, streaks, packs, SBCs), goals-by-position bar chart, paginated
match log with outcome badges and date, sourced from
GET /statistics and GET /statistics/history.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Four new tabs complete the dashboard UI for all existing Core endpoints:
Squad — view active squad with per-player chemistry dots and team
chemistry bar (colour-coded green/amber/red).
Draft — start a session with difficulty selector, pick from 5 candidates
per slot through all 11 positions, see picks accumulate in real time,
reward shown on completion.
Market — browse NPC listings with live search filter, one-click buy,
sell own cards with price input, cancel own listings; Refresh button
repopulates NPC inventory via POST /market/refresh.
Events — list all data-driven events with active/inactive state, bonus
effects summary (score/coin multipliers, extra market cards, pack
discounts), Activate/Deactivate buttons.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
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>
- GET /_bridge/cert.pem — serves the TLS CA cert as a downloadable PEM file
(only when TLS_ENABLED=true; 404 otherwise)
- GET /_bridge/guide — HTML setup page with hosts-file instructions, cert install
steps per OS, and troubleshooting tips
- ProxyState gains cert_pem field (Arc<Vec<u8>>); set via with_cert() builder
- main.rs generates cert before state construction so /_bridge/cert.pem can serve it;
both cert_pem and key_pem passed to serve_tls() for acceptor + state separately
- All 13 bridge tests pass, clippy clean
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- proxy.rs: forward_to_core() now accepts the incoming headers vec
and passes X-UT-SID, X-UT-PHISHING-TOKEN, and X-Request-ID through
to Core on every mapped request (#19, #20)
- TODO.md: mark #15-#20 as complete with implementation notes;
update test counts; clean up duplicate #15 entry
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- shaper.rs: shape_response() dispatches on core_path to wrap Core
JSON in FUT envelope format; shapes auth (/ut/auth → sid/pid/
phishingToken/persona envelope), profile, club, squad, market,
packs; unknown paths pass through unchanged
- proxy.rs: calls shape_response() on every successful Core response
before returning to the FIFA 23 client
- mapper.rs: expanded from 6 to 18 speculative FUT endpoint mappings
covering auth, profile/settings, club/usermassinfo, item/collection,
squad (GET+PUT), packs+purchase, transfer market+watchlist+bid,
objectives, events, squad battles, and match result submission
- admin.rs: GET /_bridge/captures/diff?a=<id>&b=<id> compares two
captures; reports method/path/status changes, header diffs, and
structured JSON body diffs (key-level for objects, length for others)
- main.rs: registers /_bridge/captures/diff route
- Unit tests: 4 shaper tests, 6 mapper tests (10 total, all passing)
- All 13 integration tests still passing
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
FIFA 23 reverse-engineering proxy and integration scaffold.
- Catch-all HTTP proxy that captures all incoming FIFA 23 traffic
- Known-route mapper (speculative FUT paths → Core API calls)
- Placeholder JSON responses for unmapped endpoints
- Admin endpoints: GET /_bridge/captures, GET /_bridge/unknown
- Capture persistence to captures/*.json for RE analysis
- 4 unit tests passing
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>