New landing page with gradient hero text, feature grid, how-it-works
steps, CTA card, and ecosystem footer — matching the design language
of rstack.online, rwallet.online, and other r* apps.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add migration 0003 for visibility and owner_did fields on SharedSpace
(fields were in model but migration was never created, causing 500s)
- Add placeholder encryptid.browser.js to fix staticfiles manifest error
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Also imported by portal/views_shared_space.py but never defined,
causing a second ImportError after the SpacePermission fix.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The SpacePermission DRF permission class was imported in files/views.py
but never defined, causing an ImportError that crash-looped the app.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add SDK browser bundle to base template and shared space login page.
Passkey auth alongside existing password form.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add visibility and owner_did fields to SharedSpace model. Protect upload
endpoints with check_space_access(). Add SpacePermission DRF permission
class to MediaFileViewSet.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add EncryptID as a DRF authentication class:
- Add encryptid_auth.py with EncryptIDAuthentication backend
- Verifies Bearer tokens against EncryptID server
- Auto-creates Django User from DID claims
- Add ENCRYPTID_SERVER_URL and ENCRYPTID_JWT_SECRET settings
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
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>