Raft Demo / Documentation

Roadmap

  1. Roadmap
  2. Features Working
  3. High Priority
  4. General
  5. Optimization
  6. Deployment
  7. Search
  8. Calendar
  9. Signal
  10. Files
  11. People
  12. Security
  13. New feature modules

Features Working

Core:

  • Security
    • content is encrypted at rest and no available to the server when logged out.
    • Secure authentication required (passkey or security key)
    • No third party services or content
    • Best practices for rails security
  • Full text search
    • Search Events, Files, People, including encrypted fields and content.
  • Changes
    • View recent changes on landing pages
    • View all changes for a workspace or self
  • Sharing
    • By default, workspace members’ have access, no one else does.
    • Specific resource may be shared via time-limited unique URLs
    • Centrally track all the shared URLs for a workspace.
    • Shared URLs may grant view, comment, edit, or admin access
  • People
    • allow users to have multiple profiles and choose which one is associated with each workspace.
    • workspaces have members, contacts, admins.
    • Admins may invite people to join a workspace via a join URL
  • Under the hood
    • Attachments are encrypted and stored in S3-compatible object storage service.
    • Background job processing for long tasks (encrypted in db)

Modules:

  • Files
    • Files stored in a familiar folder tree
    • Basic file operations: upload, download, rename, move, trash/untrash, purge.
    • Batch or single file operations
    • Collaborative editing of documents, spreadsheets, presentations, pdf via OnlyOffice Docs.
    • File versioning
    • Preview generation for images and office documents
    • Nice uploads: upload progress bar, drag and drop, multi files and nested folders
    • auto-refresh when a file or folder changes in another window or by another user.
    • partial drag and drop to move files
  • Events
    • One time events and recurring calendar events.
    • View events by month, week, or day.

High Priority

  • Separate login username from profile usernames
  • Check that workflow for admins, editors, viewers make sense.
  • Export folders to a zip file.
  • Actually useful events (attendance, better UI, delete/edit event in a series, etc)
  • Better profile controls (choose default profile, change profile for a workspace).

General

  • Ability to add user comments to records.
  • Ability to pin records to the dashboard.
  • Ability to star records and search only starred records.
  • Gracefully render obnoxious user input (e.g. very long display names)
  • Patch onlyoffice editors to remove 20 person limit
  • Better theme

Optimization

  • Implement a service worker to cache images in memory, since we set a very strict no-store cache header.
  • Enable view caching where appropriate
  • Add indexes to database where real world usage says they are needed
  • Reduce javascript and css file sizes by removing the parts of bootstrap we don’t use
  • ActionCable optimization:
    • Replace ActionCable with AnyCable. https://github.com/anycable/anycable-rails
    • Stand alone Cable server https://guides.rubyonrails.org/action_cable_overview.html#running-standalone-cable-servers
    • AnyCable offers a “whisper” feature for publishing transient broadcasts between clients, without touching your Rails backend. This is ideal for cursor position and Y.js. Add whisper: true to your Rails channels when using this Y-rb and AnyCable. https://docs.anycable.io/rails/extensions?id=whispering

Deployment

  • infrastructure-as-code container-based deployment recipe
  • Multiple postgres database instances
  • Multiple web app instances
  • Multiple TLS termination instances
  • Multiple onlyoffice editor instances
    (requires shard-key https://api.onlyoffice.com/docs/docs-api/get-started/configuration/shard-key/)
  • stand alone cable server https://guides.rubyonrails.org/action_cable_overview.html#running-standalone-cable-servers
  • index content of office documents
  • index content of PDF documents
  • use OCR to index content of raster PDF documents

Calendar

  • Calendar categories or projects
  • Event attendees
  • Event discussion
  • Meeting scheduler
  • import / export ical

Signal

  • Invite to join via signal
  • Get notifications via signal

Files

  • edit markdown with blocknote https://www.openproject.org/blog/real-time-collaboration-in-documents/
  • cut/copy/paste to move/copy files.
  • download folder to zip file
  • what happens when you upload a new version of a file with a different content type? i think it should not be allowed, but add a convert button?
  • efficient versions: merge versions when checksums have not changed and when close in time.
  • Enable converting between file formats using either libreoffice or onlyoffice
  • move/copy files between workspaces?
  • Do lazy purging via a background job.
  • Do lazy preview generate via a background job.
  • Do lazy archive download generation via a background job.
  • Generate previews using a remote service (both for security and performance)
  • Support resumable uploads.
    https://github.com/stakach/Resumable-Uploads
    https://javascript.info/resume-upload
  • Support better drag and drop file moving. Some possible drop targets are missing.
  • Support historical snapshotting of the entire directory tree structure (depends on deduplication).
  • Support deduplication (actually pretty easy).
  • Support storing diff blobs instead of full change for past versions https://github.com/halostatue/diff-lcs
  • Show diffs for text or markdown files: https://github.com/samg/diffy
  • Support editing raster images (non-collaboratively):
    • https://github.com/nhn/tui.image-editor
    • https://github.com/scaleflex/filerobot-image-editor

People

  • Custom fields for people
  • Build custom lists of people
  • Show activity for a person

Security

  • Security audit
  • Automatically terminate session when the last tab is closed using a web worker.

New feature modules

Forms

  • Create simple forms
  • Form can be used for new member intake
  • Send form via email & signal

Chat

  • Simple real time chat, multiple channels for each workspace, including 1:1 chat.

CMS

  • Very simple public static web pages for a workspace.

Tasks

  • Task management
  • drag/drop Kanban board

Notes

  • A notes section, separate from files, that is sort of a hierarchical wiki with
    a collaborative markdown editor. Something like a lightweight Notion.

Polls/Discussion

  • A lightweight loomio-like discussion board with integrated group decision making tools.