Commit Graph
6 Commits
Author SHA1 Message Date
nmemmertandClaude Sonnet 4.6 d92e899fc7 docs: comprehensive README covering architecture, encryption model, deployment, CI/CD, and desktop app
Build & Release / Docker / backend (push) Has been cancelled
Build & Release / Docker / frontend (push) Has been cancelled
Build & Release / Desktop / Linux & Windows (push) Has been cancelled
Build & Release / Deploy to server (push) Has been cancelled
Build & Release / Create release (push) Has been cancelled
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-08-28 10:48:46 -04:00
nmemmertandClaude Sonnet 4.6 66973da859 chore: add package-lock.json files required for npm ci in Docker builds
Build & Release / Docker / backend (push) Successful in 2m28s
Build & Release / Docker / frontend (push) Failing after 3m16s
Build & Release / Desktop / Linux & Windows (push) Failing after 10m50s
Build & Release / Deploy to server (push) Has been skipped
Build & Release / Create release (push) Has been cancelled
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-08-28 10:46:07 -04:00
nmemmertandClaude Sonnet 4.6 2823b8e10e feat: Gitea Actions CI/CD, Docker registry images, drive drag-and-drop
Build & Release / Docker / backend (push) Failing after 1m31s
Build & Release / Docker / frontend (push) Failing after 1m42s
Build & Release / Deploy to server (push) Has been cancelled
Build & Release / Create release (push) Has been cancelled
Build & Release / Desktop / Linux & Windows (push) Has been cancelled
- Add .gitea/workflows/docker-build.yml: builds backend and frontend
  Docker images on every push, pushes to Gitea Container Registry
  (git.necloud.us/nate/cloudlink/{backend,frontend}:latest + SHA tag)
- Add desktop build job: Linux AppImage and Windows NSIS installer via
  Wine cross-compilation, uploaded as workflow artifacts
- Add release job: creates a Gitea release with installers attached when
  a v* tag is pushed
- Add deploy job: SSH pull + restart on pushes to master
- docker-compose.yml: add image: fields alongside build: so the server
  can pull pre-built images with docker compose pull
- DrivePage: add drag-and-drop upload with full-screen drop overlay;
  refactor upload logic into a shared uploadFile callback

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-08-28 10:41:39 -04:00
nmemmertandClaude Sonnet 4.6 9b57dd9b94 feat: real-time messaging, Electron desktop app, admin drive portal
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>
2026-08-28 10:31:41 -04:00
nmemmertandClaude Sonnet 4.6 46f0a4b71e feat: X25519 ECDH sealed-box E2E encryption, zero-knowledge key exchange
- Replace libsodium with pure Web Crypto X25519 ECDH for key exchange
- Sealed-box pattern: ephemeral keypair + HKDF + AES-256-GCM for each recipient
- Store encrypted conversation key per-user so each party decrypts with their own private key
- PBKDF2-derived master key wraps X25519 private key (pkcs8) server-side for cross-device login
- Fix health endpoint ordering so it never hits auth middleware (401 bug)
- Fix postgres port exposure in docker-compose for backend connectivity
- Fix DrivePage react-query v5 onSuccess → useEffect migration
- Fix MessagesPage: use <Link> instead of <a href> to avoid page reload losing in-memory keys
- Fix formatDistanceToNow crash on WebSocket messages lacking sent_at (add fallback + null guard)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-08-28 10:10:40 -04:00
nmemmertandClaude Sonnet 4.6 937bf8ad2d Initial CloudLink scaffold: E2E encrypted PWA with messaging and cloud drive
- Zero-knowledge architecture: all encryption/decryption client-side via Web Crypto API
- AES-GCM 256 for messages, files, and key wrapping; PBKDF2 for password-based key derivation
- Node.js/TypeScript backend: JWT auth with refresh rotation, argon2id passwords, TOTP 2FA
- PostgreSQL schema: encrypted blobs only, server never stores plaintext
- Real-time messaging via WebSocket relay (server routes ciphertext, cannot read it)
- Encrypted file upload/download with per-file keys wrapped by user master key
- React PWA frontend: Vite + Tailwind + service worker for offline support
- Docker Compose: postgres + backend + frontend + nginx with TLS

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-08-28 09:41:18 -04:00