Messaging: - Optimistic UI: message appears instantly in sender's view on send - Skip WS relay-back of own messages to avoid duplicates - Fix sent_at field name mismatch (sentAt → sent_at fallback) Admin portal: - /admin route: list all users, storage used vs quota, file count - Inline-edit per-user storage quota (MB) and admin flag - Stats header: total users, total storage, total files - is_admin + storage_quota_mb columns added to users table - Login response now includes isAdmin; sidebar shows Admin link for admins - requireAdmin middleware on all /admin/* routes Electron desktop app (desktop/): - BrowserWindow with native title bar, system tray, hide-to-tray on close - First-run setup dialog to configure self-hosted server URL - Persists server URL via electron-store - Tray menu: Open, Change server URL, Quit - IPC: showNotification for future native push notifications - electron-builder config for macOS (DMG), Windows (NSIS), Linux (AppImage) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
52 lines
1.3 KiB
JSON
52 lines
1.3 KiB
JSON
{
|
|
"name": "cloudlink-desktop",
|
|
"version": "1.0.0",
|
|
"description": "CloudLink — encrypted messaging and cloud drive",
|
|
"main": "main.js",
|
|
"scripts": {
|
|
"start": "electron .",
|
|
"build": "electron-builder --mac --win --linux",
|
|
"build:mac": "electron-builder --mac",
|
|
"build:win": "electron-builder --win",
|
|
"build:linux": "electron-builder --linux"
|
|
},
|
|
"build": {
|
|
"appId": "us.necloud.cloudlink",
|
|
"productName": "CloudLink",
|
|
"copyright": "Copyright © 2026",
|
|
"directories": {
|
|
"output": "dist"
|
|
},
|
|
"files": [
|
|
"main.js",
|
|
"preload.js",
|
|
"assets/**"
|
|
],
|
|
"mac": {
|
|
"category": "public.app-category.productivity",
|
|
"icon": "assets/icon.icns",
|
|
"target": [{ "target": "dmg", "arch": ["x64", "arm64"] }]
|
|
},
|
|
"win": {
|
|
"icon": "assets/icon.ico",
|
|
"target": [{ "target": "nsis", "arch": ["x64"] }]
|
|
},
|
|
"linux": {
|
|
"icon": "assets/icon.png",
|
|
"category": "Network",
|
|
"target": [{ "target": "AppImage", "arch": ["x64"] }]
|
|
},
|
|
"nsis": {
|
|
"oneClick": false,
|
|
"allowToChangeInstallationDirectory": true
|
|
}
|
|
},
|
|
"devDependencies": {
|
|
"electron": "^33.0.0",
|
|
"electron-builder": "^25.0.0"
|
|
},
|
|
"dependencies": {
|
|
"electron-store": "^10.0.0"
|
|
}
|
|
}
|