Split settings into Settings and Diagnostics tabs; run background read-only tests for codecs, camera/audio modes, network reachability, and casting/display extras. DevDiagnosticsReport.toJson() prepares future BE upload.
Co-authored-by: Cursor <cursoragent@cursor.com>
Three card links (reports, git, tickets) match crash console styling with stronger hover lift; nginx serves index.html at /app/androidcast_project/ instead of redirecting to crashes.
Co-authored-by: Cursor <cursoragent@cursor.com>
The script lived under examples/crash_reporter/backend/scripts but pointed at examples/tmp/; smoke notes live at project root tmp/alpha_smoke_round1.txt.
Co-authored-by: Cursor <cursoragent@cursor.com>
Auth: :user() returns early when companies are cached, so requireTicketsTable() ran with no PDO and always failed. Always open the connection before checking tickets.
Co-authored-by: Cursor <cursoragent@cursor.com>
Use SHOW TABLES/COLUMNS instead of information_schema so requireTicketsTable() works when the table exists but the app user cannot read metadata catalogs.
Co-authored-by: Cursor <cursoragent@cursor.com>
App user cannot CREATE TABLE on production MariaDB; add migrate-003-tickets.sh,
wire init-mariadb and base schema, and return 503 with migration hint when tickets
is missing instead of opaque SQL errors.
Co-authored-by: Cursor <cursoragent@cursor.com>
Tickets use a clipboard-with-check glyph instead of a document stack.
Locale control shows country flag only when the shell is collapsed,
and flag plus two-letter code when expanded (login always shows both).
Co-authored-by: Cursor <cursoragent@cursor.com>