feat: vault-aligned server v1 + UX polish
All checks were successful
CI / Windows build (push) Successful in 7m47s

Redesign the optional FastAPI companion around vault files (manifest /
PUT/GET/DELETE + OCR jobs) instead of legacy strokes_json notes. Wire a
client Server settings panel for health/login. Polish shell UX: l10n for
settings/home/board, sticky-board empty state, and a narrow-screen
diagnostics FAB.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-08-05 19:04:48 +08:00
parent d346cc2670
commit 198da00ecd
20 changed files with 1325 additions and 90 deletions

View File

@@ -489,4 +489,103 @@ class AppLocalizationsEn extends AppLocalizations {
@override
String get syncNotConfigured => 'Enter a server URL to enable sync.';
@override
String get settingsDefaults => 'Defaults';
@override
String get settingsAppearance => 'Appearance';
@override
String get settingsAbout => 'About';
@override
String get settingsDefaultTool => 'Default tool';
@override
String get settingsDefaultColor => 'Default color';
@override
String get settingsDefaultWidth => 'Default stroke width';
@override
String get settingsPressureCurve => 'Pressure curve';
@override
String get settingsClearConfirmBody =>
'This resets pen defaults and appearance. Notes and documents are not affected.';
@override
String get serverSection => 'BadNote Server';
@override
String get serverUrl => 'Server URL';
@override
String get serverUrlHint => 'http://192.168.1.10:8080';
@override
String get serverUsername => 'Username';
@override
String get serverPassword => 'Password';
@override
String get serverSave => 'Save & sign in';
@override
String get serverTest => 'Test connection';
@override
String serverTestOk(String version) {
return 'Connected · API $version';
}
@override
String serverTestFail(String error) {
return 'Connection failed: $error';
}
@override
String get serverLoggedIn => 'Signed in';
@override
String get serverHint =>
'Optional. Self-hosted vault assist + deferred OCR; notes stay fully offline.';
@override
String get boardEmptyTitle => 'No sticky notes yet';
@override
String get boardEmptyBody =>
'Tap + to add a card. Write [[other-card-id]] in the body to create a backlink.';
@override
String get relativeJustNow => 'Just now';
@override
String relativeMinutesAgo(int n) {
return '${n}m ago';
}
@override
String relativeHoursAgo(int n) {
return '${n}h ago';
}
@override
String get relativeYesterday => 'Yesterday';
@override
String diagExported(int bytes) {
return 'Diagnostic pack exported ($bytes bytes)\nPath copied';
}
@override
String diagExportFail(String error) {
return 'Export failed: $error';
}
@override
String get processingOcr => 'Processing OCR…';
}