Commit Graph

39 Commits

Author SHA1 Message Date
Jeff Emmett b90c16e072 feat: update AppSwitcher categories in inline HTML
- rTube/rSwag → Creating, rSocials → Sharing, rData → Observing
- Rename Social & Media to Sharing

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 14:17:46 -08:00
Jeff Emmett 441327622e Standardize emojis across header, favicons, and ecosystem links
Canonical emoji set for consistency:
- 🕸️ rNetwork (was 🌐), ⚖️ rChoices (was 🔀), 📋 rWork (was 💼)
- 🔐 rIdentity (was 🔑), 📖 rPubs (was 📰), 💸 rFunds (was 💰)
- 💰 rWallet (was 💼 in footer), 📬 rInbox (was ✉️)
- 💭 rForum (was 💬, differentiates from rChats)
- 📢 rSocials (was 📱), 🔨 rAuctions (was 🏛️ in footer)
- 🎬 rTube (was 📹 in footer)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 12:57:13 -08:00
Jeff Emmett 0d3cee5afc refactor: migrate EncryptID URLs from encryptid.jeffemmett.com to auth.ridentity.online
Part of the ridentity.online branding migration. The EncryptID auth
server is now accessible at auth.ridentity.online (with the legacy
encryptid.jeffemmett.com kept as a backward-compatible alias).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 22:20:12 -08:00
Jeff Emmett 61add7bc56 feat: add rStack AppSwitcher dropdown to header
Adds the unified rStack app switcher as pure HTML/CSS/JS with pastel
badges, emoji icons, and categorized navigation across all 17 rStack apps.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 19:15:55 -08:00
Jeff Emmett 28aafb73fe feat: wire rfiles to pull secrets from Infisical at startup
Add entrypoint.sh that authenticates with Infisical via universal auth
and injects secrets as environment variables before the main process
starts. Update Dockerfile with ENTRYPOINT directive and add Infisical
connection vars to all services in both compose files (dev and prod).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 19:36:55 -08:00
Jeff Emmett 88674debd4 chore: update backlog — deploy task notes updated
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-21 19:19:49 -07:00
Jeff Emmett 522340507a Fix CSRF 403 behind Cloudflare tunnel — add X-Forwarded-Proto header via Traefik middleware
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-21 18:34:48 -07:00
Jeff Emmett c4ac33bd7c fix: add proper healthchecks for Celery containers
Celery containers inherited the HTTP healthcheck from the Dockerfile
but don't run a web server. Added celery inspect ping for the worker
and schedule file check for beat.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-21 18:30:11 -07:00
Jeff Emmett 91bb60c130 Fix celery-beat crash: write schedule to /tmp tmpfs
The read_only filesystem prevents celery-beat from writing its
schedule file to /app. Redirect to /tmp which is a writable tmpfs.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-21 18:20:24 -07:00
Jeff Emmett e031d16275 Add .dockerignore for optimized Docker builds
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-21 17:59:34 -07:00
Jeff Emmett 4b229aeffd Add rData analytics tracking and ecosystem footer link
- Inject rdata.online/collect.js tracking script in layout
- Add rData link to ecosystem footer

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 18:57:08 +00:00
Jeff Emmett 2610d8a30d feat: add ecosystem footer with all 16 r-suite apps
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 09:43:28 +00:00
Jeff Emmett f600ceac14 feat: add MemoryCard model for knowledge cards in shared spaces
Lightweight card system for notes, ideas, tasks, references, and quotes
within SharedSpaces. Supports markdown body, tags, media attachments (M2M),
position ordering, and type filtering. REST API at /api/v1/cards/ with
full CRUD. Phase 2 stub for Docmost collaborative editing.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 03:38:50 +00:00
Jeff Emmett b45a29c092 chore: add deployment backlog task
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 15:33:34 -07:00
Jeff Emmett 56f58b3583 security: harden production containers
Add cap_drop ALL, no-new-privileges, read_only + tmpfs to all
containers (postgres, redis, backend, celery worker, celery beat).
Matches Phase 3 security hardening standards.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 15:27:17 -07:00
Jeff Emmett 651bbe5d87 docs: add MODULE_SPEC.md with permission model and capabilities
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 12:30:14 -07:00
Jeff Emmett 67fbdf0cb0 chore: add rInbox to r* Ecosystem footer
Add rinbox.online link to the ecosystem footer navigation.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 18:31:22 -07:00
Jeff Emmett 3a449947b2 chore: backlog landing page redesign task
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 15:33:45 -07:00
Jeff Emmett b5251be1a2 feat: redesign landing page to match rStack design paradigm
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>
2026-02-15 15:30:18 -07:00
Jeff Emmett a99de7388a chore: initialize backlog and log deployment fix
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 15:16:46 -07:00
Jeff Emmett 9c07471229 fix: add missing migration and encryptid.browser.js placeholder
- 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>
2026-02-15 15:15:20 -07:00
Jeff Emmett f26850ded2 fix: add missing check_space_access function to encryptid_auth
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>
2026-02-15 15:03:28 -07:00
Jeff Emmett 2b20b23d0b fix: add missing SpacePermission class to encryptid_auth
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>
2026-02-15 15:00:33 -07:00
Jeff Emmett 0f76ae63a4 feat: add EncryptID passkey login to frontend templates
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>
2026-02-15 09:36:05 -07:00
Jeff Emmett 629e61de0a Add emoji favicon (📁) for browser tab
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 19:13:39 -07:00
Jeff Emmett 284a73d3fa feat: enforce space visibility on uploads and API views
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>
2026-02-13 11:54:15 -07:00
Jeff Emmett e8ad0f7f31 feat: add EncryptID passkey auth backend for DRF
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>
2026-02-13 07:34:34 -07:00
Jeff Emmett 5aae2776ed Remove background SW uploads, use simple direct fetch instead
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>
2026-02-10 18:18:35 +00:00
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