feat(oxibadge): add onboarding flow with i18n and reader preferences
Check, format and test / build (push) Successful in 9m59s

Adds the first real screen: a setup form for the device's host/port,
tested against the real device (3 retries) and persisted to
preferences.toml before showing a placeholder "done" screen.

- Rust: test_connection/save_preferences/load_preferences commands;
  preferences stored as [[reader]] in TOML so more readers can be
  added later without a format change.
- Svelte: split the monolithic page into reusable components
  (Screen, Column, Field, Button, ErrorBanner, Hint) under
  src/lib/components, sharing design tokens from app.css.
- Automatic it/en i18n via svelte-i18n, locale detected from
  navigator.language.

Assisted-by: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-10-07 11:08:02 +02:00
parent 268a917a69
commit 99772b9e4a
19 changed files with 821 additions and 29 deletions
+25
View File
@@ -0,0 +1,25 @@
{
"loading": "Loading...",
"onboarding": {
"title": "Welcome!",
"subtitle": "Connect Oxibadge to your time clock by entering its IP address and port.",
"host_label": "IP address",
"port_label": "Port",
"hint": "You can find the address in the time clock's network settings.",
"button": {
"idle": "Test connection",
"testing": "Connecting...",
"retry": "Retry"
},
"error_title": "Could not reach the time clock",
"errors": {
"connection-refused": "Connection refused",
"timed-out": "Connection timed out",
"dns-failure": "Invalid or unreachable address",
"unknown": "Connection error"
}
},
"done": {
"message": "Nothing to do here."
}
}