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

@@ -199,5 +199,43 @@
},
"syncAuto": "Sync automatically on launch",
"syncCredentialsNote": "Credentials are stored locally in plain text. Use a dedicated app password.",
"syncNotConfigured": "Enter a server URL to enable sync."
"syncNotConfigured": "Enter a server URL to enable sync.",
"settingsDefaults": "Defaults",
"settingsAppearance": "Appearance",
"settingsAbout": "About",
"settingsDefaultTool": "Default tool",
"settingsDefaultColor": "Default color",
"settingsDefaultWidth": "Default stroke width",
"settingsPressureCurve": "Pressure curve",
"settingsClearConfirmBody": "This resets pen defaults and appearance. Notes and documents are not affected.",
"serverSection": "BadNote Server",
"serverUrl": "Server URL",
"serverUrlHint": "http://192.168.1.10:8080",
"serverUsername": "Username",
"serverPassword": "Password",
"serverSave": "Save & sign in",
"serverTest": "Test connection",
"serverTestOk": "Connected · API {version}",
"@serverTestOk": {
"placeholders": { "version": { "type": "String" } }
},
"serverTestFail": "Connection failed: {error}",
"@serverTestFail": {
"placeholders": { "error": { "type": "String" } }
},
"serverLoggedIn": "Signed in",
"serverHint": "Optional. Self-hosted vault assist + deferred OCR; notes stay fully offline.",
"boardEmptyTitle": "No sticky notes yet",
"boardEmptyBody": "Tap + to add a card. Write [[other-card-id]] in the body to create a backlink.",
"relativeJustNow": "Just now",
"relativeMinutesAgo": "{n}m ago",
"@relativeMinutesAgo": { "placeholders": { "n": { "type": "int" } } },
"relativeHoursAgo": "{n}h ago",
"@relativeHoursAgo": { "placeholders": { "n": { "type": "int" } } },
"relativeYesterday": "Yesterday",
"diagExported": "Diagnostic pack exported ({bytes} bytes)\nPath copied",
"@diagExported": { "placeholders": { "bytes": { "type": "int" } } },
"diagExportFail": "Export failed: {error}",
"@diagExportFail": { "placeholders": { "error": { "type": "String" } } },
"processingOcr": "Processing OCR…"
}