# OxiCloud TODO List

This document contains the task list for the development of OxiCloud, a minimalist and efficient cloud storage system similar to NextCloud but optimized for performance.

## Phase 1: Basic File Functionalities

### Folder System
- [x] Implement API for creating folders
- [x] Add support for hierarchical paths in the backend
- [ ] Update UI to show folder structure (tree)
- [x] Implement navigation between folders
- [x] Add functionality to rename folders
- [x] Add option to move files between folders

### File Preview
- [x] Implement integrated image viewer
- [ ] Add basic PDF viewer
- [ ] Generate thumbnails for images
- [x] Implement specific icons by file type
- [ ] Add text/code preview

### Enhanced Search
- [x] Implement search by name
- [x] Add filters by file type
- [x] Implement search by date range
- [x] Add filter by file size
- [x] Add search within specific folders
- [x] Implement cache for search results

### UI/UX Optimizations
- [ ] Improve responsive design for mobile devices
- [ ] Implement drag & drop between folders
- [x] Add support for multiple file selection
- [x] Implement multiple file uploads
- [ ] Add progress indicators for long operations
- [x] Implement UI notifications for events
- [ ] Photos timeline: virtual scrolling
  - Solo mantener en el DOM las filas visibles en el viewport + un margen. Al hacer scroll, reciclar los nodos que salen por arriba para los que entran por abajo.
  - Ventajas: Funciona perfectamente con 50,000 fotos. Uso de memoria constante.
  - Excesiva para ahora — evaluar cuando el volumen de fotos lo justifique.

## Phase 2: Authentication and Multi-User

### User System
- [x] Design data model for users
- [x] Implement user registration
- [x] Create login system
- [ ] Add user profile page
- [ ] Implement password recovery
- [x] Separate storage by user

### Quotas and Permissions
- [x] Implement storage quota system
- [x] Add basic role system (admin/user)
- [ ] Create admin panel
- [x] Implement folder-level permissions
- [x] Add storage usage monitoring

### Basic Security
- [x] Implement secure password hashing with Argon2
- [x] Add session management
- [x] Implement JWT authentication token
- [ ] Add CSRF protection
- [ ] Implement login attempt limits
- [ ] Create activity logging system

## Phase 3: Collaboration Features

### File Sharing
- [x] Implement shared link generation
- [x] Add permission configuration for links
- [x] Implement password protection for links
- [ ] Add expiration dates for shared links
- [x] Create page to manage all shared resources
- [ ] Implement sharing notifications

### Recycle Bin
- [x] Design model for storing deleted files
- [x] Implement soft deletion (move to trash)
- [x] Add functionality to restore files
- [x] Implement automatic purge by time
- [x] Add option to manually empty trash
- [x] Implement storage limits for trash

### Activity Log
- [ ] Create model for activity events
- [ ] Implement logging of CRUD operations
- [ ] Add logging of access and security events
- [ ] Create activity history page
- [ ] Implement filters for activity log
- [ ] Add log export

## Phase 4: API and Synchronization

### Complete REST API
- [x] Design OpenAPI specification
- [x] Implement endpoints for file operations
- [x] Add endpoints for users and authentication
- [ ] Implement automatic documentation (Swagger)
- [ ] Create API token system
- [ ] Implement rate limiting
- [ ] Add API versioning

### WebDAV Support
- [x] Implement basic WebDAV server
- [x] Add authentication for WebDAV
- [x] Implement PROPFIND operations
- [x] Add support for locking
- [x] Test compatibility with standard clients
- [x] Optimize WebDAV performance
- [ ] Implement Range Requests (RFC 7233) for resumable transfers
- [ ] Support partial file updates with HTTP PATCH for bandwidth efficiency

### Sync Client
- [ ] Design client architecture in Rust
- [ ] Implement unidirectional synchronization
- [ ] Add bidirectional synchronization
- [ ] Implement conflict detection
- [ ] Add configuration options
- [ ] Create minimal client version for Windows/macOS/Linux
- [ ] Implement bandwidth throttling controls
- [ ] Add delta synchronization for large files
- [ ] Support synchronization pausing and resuming

## Phase 5: Advanced Features

### File Encryption
- [ ] Research and select encryption algorithms
- [ ] Implement at-rest encryption for files
- [ ] Add key management
- [ ] Implement encryption for shared files
- [ ] Create security documentation

### File Versioning
- [ ] Design version storage system
- [ ] Implement version history
- [ ] Add difference visualization
- [ ] Implement version restoration
- [ ] Add version retention policies

### Basic Applications
- [x] Design plugin/app system
- [ ] Implement basic text viewer/editor
- [ ] Add simple notes application
- [x] Implement basic calendar
- [x] Create API for third-party applications

## Continuous Optimizations

### Backend
- [x] Implement file cache with Rust
- [x] Enable Link Time Optimization (LTO) for better performance
- [x] Optimize large file transmission
- [x] Add adaptive compression by file type
- [x] Implement asynchronous processing for heavy tasks
- [x] Optimize database queries
- [ ] Implement scaling strategies
- [x] Implement transfer acceleration with multipart chunking
- [ ] Implement differential sync algorithm (similar to rsync)
- [x] Add strong ETag support for more efficient caching

### Frontend
- [ ] Optimize initial asset loading
- [ ] Implement lazy loading for large lists
- [x] Add local cache (localStorage/IndexedDB)
- [ ] Optimize UI rendering
- [ ] Implement intelligent prefetching
- [ ] Add basic offline support
- [ ] Implement client-side image resizing before upload
- [x] Add HTTP/2 support for multiplexing requests
- [ ] Implement progressive image loading

### Storage
- [ ] Research deduplication options
- [ ] Implement block storage
- [x] Add transparent compression by file type
- [ ] Implement log rotation and archiving
- [ ] Create automated backup system
- [ ] Add support for distributed storage
- [ ] Implement media transcoding for optimized delivery
- [x] Add content-aware compression by file format
- [ ] Implement dynamic thumbnail resizing based on viewport

### Bandwidth & Transfer Optimization
- [ ] **Sub-file chunked dedup (Restic/Borg style)**
  - [ ] Implement Content-Defined Chunking (CDC) with FastCDC/Rabin rolling hash
  - [ ] Variable-size chunks (target 1-4 MB) instead of whole-file blobs
  - [ ] Per-chunk BLAKE3 hashing and dedup (saves storage + bandwidth on similar files)
  - [ ] Chunk-level Zstd compression (better ratio than whole-file)
  - [ ] Migrate existing whole-file blobs to chunked storage
- [ ] **Delta sync / rsync-style transfers**
  - [ ] Implement rolling checksum algorithm for block-level diffing
  - [ ] Client sends only changed blocks on re-upload (not the full file)
  - [ ] Server-side block assembly from delta + existing chunks
  - [ ] Huge savings for large files with small edits (VMs, databases, ISOs)
- [ ] **Resumable uploads & downloads (RFC 7233 / tus.io)**
  - [ ] Server tracks partial upload state; client resumes from last byte on failure
  - [ ] HTTP Range responses for download resume after network drops
  - [ ] tus.io protocol support for cross-client compatibility
- [ ] **Client-side optimization before upload**
  - [ ] Resize images to configurable max dimensions before upload (e.g. 4K cap)
  - [ ] Re-encode videos to efficient codec (H.265/AV1) client-side before upload
  - [ ] ⚡ **HIGH IMPACT / QUICK WIN** — Pre-compute BLAKE3 hash client-side (WASM); query server before upload; skip transfer entirely if blob already exists (instant dedup, zero bandwidth)
- [ ] **Server-side on-demand transcoding**
  - [ ] Store originals; serve WebP/AVIF for images on request (saves download BW)
  - [ ] Adaptive video streaming (HLS/DASH) from stored originals
  - [ ] Lazy generation + cache of transcoded variants
- [ ] **Smart sync (placeholder/on-demand files)**
  - [ ] Sync client downloads metadata only; fetch file content on first open
  - [ ] Pin/unpin files for offline availability
  - [ ] Automatic eviction of least-recently-used local copies
- [ ] **Transfer-level compression**
  - [ ] Zstd streaming compression for HTTP responses (better than gzip for large files)
  - [ ] Brotli for static assets; Zstd for dynamic/binary content
  - [ ] Content-aware: skip compression for already-compressed formats (JPEG, ZIP, etc.)
- [ ] **Batched & multiplexed operations**
  - [ ] Batch small file uploads into single request (tar-stream or multipart bundle)
  - [ ] HTTP/2 multiplexing for parallel chunk transfers on single connection
  - [ ] Server-side ZIP streaming for multi-file download (already partial)

## Infrastructure and Deployment

- [x] Create Docker configuration
- [ ] Implement CI/CD with GitHub Actions
- [x] Add automated tests
- [x] Create installation documentation
- [ ] Implement monitoring and alerts
- [ ] Add automatic update system

## New Comprehensive Roadmap

### Advanced File Management
- [x] Implement optimized file upload/download
  - [x] Implement chunked upload for large files
  - [x] Add file integrity verification
  - [x] Develop adaptive compression by file type
- [ ] Implement preview for different file types
  - [ ] Create integrated PDF viewer
  - [ ] Add office document viewer
  - [ ] Develop code viewer with syntax highlighting
- [ ] Add online document editing
  - [ ] Integrate text/markdown editor
  - [ ] Implement collaborative spreadsheet editor
  - [ ] Develop simple image editor
- [ ] Implement file version control
  - [ ] Create version history system
  - [ ] Add previous version restoration
  - [ ] Develop visual changes comparator

### Multi-device Synchronization
- [ ] Develop synchronization clients
  - [ ] Windows client using Rust
  - [ ] macOS client using Rust
  - [ ] Linux client using Rust
- [ ] Create mobile applications
  - [ ] Android application
  - [ ] iOS application
- [ ] Implement selective synchronization
  - [ ] Allow specific folder selection
  - [ ] Add synchronization profiles
  - [ ] Develop synchronization by file types
- [ ] Develop delta synchronization
  - [ ] Implement incremental change transfer
  - [ ] Add differential compression
  - [ ] Implement intelligent retransmission

### Advanced Sharing
- [x] Improve public links
  - [ ] Add configurable expiration date
  - [x] Implement password protection
  - [ ] Develop download limits
- [x] Implement granular permissions
  - [x] Add per-folder/file permissions
  - [x] Develop customizable roles
  - [x] Implement permission inheritance
- [ ] Add real-time collaboration
  - [ ] Develop collaborative editing
  - [ ] Add presence indicators
  - [ ] Implement per-user change history
- [ ] Integrate with social networks
  - [ ] Add direct sharing to popular platforms
  - [ ] Implement customized preview for networks
  - [ ] Develop sharing statistics

### Robust Security
- [ ] Implement end-to-end encryption
  - [ ] Research and select optimal algorithms
  - [ ] Develop key management system
  - [ ] Add in-transit and at-rest encryption
- [ ] Add multi-factor authentication
  - [ ] Integrate app-based authentication
  - [ ] Add support for U2F/Yubikey
  - [ ] Implement backup codes
- [x] Develop password policies
  - [x] Add customizable requirements
  - [ ] Implement password rotation
  - [ ] Develop compromised password detection
- [ ] Create detailed audit system
  - [ ] Log access and actions
  - [ ] Add security alerts
  - [ ] Implement configurable log retention

### Personal Data Management
- [x] Complete CardDAV implementation
  - [x] Finalize contact synchronization
  - [x] Add support for contact groups
  - [x] Implement custom fields
- [x] Complete CalDAV implementation
  - [x] Finalize calendar synchronization
  - [x] Add support for recurring events
  - [ ] Implement notifications/reminders
- [ ] Develop password manager
  - [ ] Create encrypted storage
  - [ ] Add password generator
  - [ ] Implement auto-fill
- [ ] Implement encrypted notes
  - [ ] Develop notes editor
  - [ ] Add tags and organization
  - [ ] Implement full-text search

### Automation and Workflows
- [ ] Create automated rules
  - [ ] Develop automatic file organization
  - [ ] Add scheduled actions
  - [ ] Implement customizable triggers
- [ ] Integrate with productivity tools
  - [ ] Develop connectors for popular services
  - [ ] Add webhooks for integration
  - [x] Implement API for extensions
- [ ] Create customizable workflows
  - [ ] Develop document approval/review
  - [ ] Add configurable states and transitions
  - [ ] Implement automated notifications
- [ ] Implement scheduled actions
  - [ ] Add automated backups
  - [ ] Develop intelligent archiving
  - [ ] Implement periodic analysis

### Intelligence and Analysis
- [ ] Implement OCR for images
  - [ ] Add text recognition in images
  - [ ] Develop indexing of recognized content
  - [ ] Implement search in extracted text
- [ ] Create automatic categorization
  - [ ] Develop content-based classification
  - [ ] Add intelligent grouping
  - [ ] Implement organization suggestions
- [ ] Add intelligent tagging
  - [ ] Implement entity recognition
  - [ ] Develop topic analysis
  - [ ] Add facial tagging for photos
- [ ] Develop personalized recommendations
  - [ ] Implement usage-based suggestions
  - [ ] Add relevant content discovery
  - [ ] Develop needs prediction
- [ ] Implement intelligent photo gallery
  - [ ] Create advanced photo viewer with smooth zoom and navigation
  - [ ] Add EXIF metadata extraction and visualization
  - [ ] Implement map of photo locations
  - [ ] Develop automatic timeline by date/event
  - [ ] Add recognition and grouping by identified people
  - [ ] Implement automatic album creation by events, places, and people
  - [ ] Develop photo search using combined filters (person+place+date)
  - [ ] Add scene and object detection in photos (beach, mountain, animals, etc.)
  - [ ] Implement similar or duplicate photo detection
  - [ ] Add non-destructive basic editing features (crop, filters, adjustments)
  - [ ] Video support

### Enterprise Collaboration
- [ ] Create shared workspaces
  - [ ] Develop team structures
  - [ ] Add project templates
  - [ ] Implement customized dashboards
- [x] Implement role-based access control
  - [x] Develop customizable roles
  - [x] Add granular access policies
  - [ ] Implement segregation of duties
- [ ] Add comments and annotations
  - [ ] Develop document annotations
  - [ ] Add highlighting and marking
  - [ ] Implement comment resolution
- [ ] Integrate videoconference services
  - [ ] Add direct calls from platform
  - [ ] Develop screen sharing
  - [ ] Implement meeting recording

### Advanced Technical Optimizations
- [ ] Implement distributed architecture
  - [ ] Develop high availability
  - [ ] Add load balancing
  - [ ] Implement fault tolerance
- [ ] Create tiered storage
  - [ ] Develop hot/warm/cold stratification
  - [ ] Add automatic migration policies
  - [ ] Implement cost optimization
- [x] Optimize compression and deduplication
  - [x] Develop adaptive compression
  - [ ] Add block-level deduplication
  - [ ] Implement similar file detection

### Interoperability and Extensibility
- [x] Improve RESTful API
  - [x] Complete OpenAPI documentation
  - [ ] Add API versioning
  - [ ] Implement intelligent rate limiting
- [ ] Develop webhook system
  - [ ] Add configurable triggers
  - [ ] Implement retries and reliability
  - [ ] Develop delivery verification
- [ ] Implement OAuth for third parties
  - [ ] Add standard authentication flows
  - [ ] Develop granular permission management
  - [ ] Implement access revocation
- [ ] Create developer SDK
  - [ ] Develop client libraries for popular languages
  - [ ] Add examples and documentation
  - [ ] Implement testing sandbox

### Governance and Compliance
- [x] Implement retention policies
  - [x] Develop configurable retention by type
  - [ ] Add automatic archiving
  - [x] Implement secure deletion
- [ ] Add regulatory compliance
  - [ ] Develop GDPR tools
  - [ ] Add HIPAA compliance where applicable
  - [ ] Implement compliance matrices
- [ ] Create complete data export
  - [ ] Develop standardized formats
  - [ ] Add scheduled export
  - [ ] Implement data portability
- [ ] Implement legal hold
  - [ ] Develop case-based retention
  - [ ] Add evidence preservation
  - [ ] Implement chain of custody


- lightcss for frontend.
