SW was causing issues. Reverted to straightforward XHR uploads with
progress bar, duplicate detection, and overwrite/skip. No IndexedDB,
no SW messaging. SW is now minimal (cache-only for static assets).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
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>
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>
- 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>
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>
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>
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>
- 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>
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>