Commit Graph

11 Commits

Author SHA1 Message Date
Jeff Emmett 6c4c21591f Fix SW not ready: add registration + wait for controller
The service worker was never registered. Added registration in the
base template. Upload logic now waits for the SW to claim the page
instead of erroring, with a direct-fetch fallback if SW times out.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 18:14:53 +00:00
Jeff Emmett 0ce44383b5 Add background uploads via Service Worker + IndexedDB
Uploads now continue even if the user navigates away from the page.
Files are stored in IndexedDB, the SW handles the actual fetch to
direct.rfiles.online, and results are broadcast back to any open tab.
Shows a notification if no tab is focused when upload completes.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 18:11:55 +00:00
Jeff Emmett 9214aed499 Remove chunked upload code (no longer needed with direct bypass)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 18:04:16 +00:00
Jeff Emmett 8220ad5d3b Route uploads through direct.rfiles.online to bypass Cloudflare 100MB limit
- Add direct.rfiles.online A record (DNS only, not proxied through CF)
- Add TLS-enabled Traefik router with Let's Encrypt for direct subdomain
- Add DirectUploadAPIView that accepts space slug as form field
- All uploads now go to https://direct.rfiles.online/api/upload/
- CORS allows *.rfiles.online origins
- Middleware treats 'direct' as reserved (not a shared space)
- Removes chunked upload complexity (no longer needed)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 18:02:14 +00:00
Jeff Emmett 6eabd8eaa2 Add chunked upload to bypass Cloudflare 100MB limit
Cloudflare free plan caps request bodies at 100MB. Files > 90MB now
upload in 80MB chunks: init session, send chunks sequentially, server
reassembles and creates MediaFile. Small files still use direct upload.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 16:47:29 +00:00
Jeff Emmett d1b44e9b1e Add duplicate file detection with skip/overwrite options
When uploading a file that already exists in a shared space (same filename),
the UI now shows the existing file info with Overwrite and Skip buttons
instead of silently creating a duplicate.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 16:25:13 +00:00
Jeff Emmett de38c8e1a3 Add migration for max_file_size_mb default change (100 → 0)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 16:13:49 +00:00
Jeff Emmett 0d3ffb1060 Fix upload failure: add default storage backend to STORAGES
Django 5.x requires a 'default' key in STORAGES for FileField uploads.
Only 'staticfiles' was defined, causing InvalidStorageError on upload.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 16:12:20 +00:00
Jeff Emmett 8c53efe43d Remove file size limit
- Django upload limit raised to 10GB
- SharedSpace max_file_size_mb default changed to 0 (unlimited)
- Server-side and client-side checks skip when limit is 0
- Upload UI shows "No file size limit"

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 16:06:33 +00:00
Jeff Emmett e89060beab Add initial database migration for files app
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 16:01:55 +00:00
Jeff Emmett cf9cc22c58 Initial commit: rfiles.online standalone file sharing platform
Extracted from PKMN (personal-knowledge-management-network) into its own
repo with separate database, file storage, and Docker stack.

- files app: SharedSpace, MediaFile, PublicShare, FileAccessLog models
- portal app: Landing page, upload, file management, shared space views
- Host-based URL routing for subdomain shared spaces (*.rfiles.online)
- PWA with service worker and share target support
- Celery tasks for expired share cleanup and file processing
- Docker Compose for dev and production (Traefik + PostgreSQL + Redis)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 15:46:31 +00:00