System Architecture - Unified Space & Project
This document provides a comprehensive architectural overview of the unified space and project management system for AppFlowy. The system introduces a hierarchical space model with integrated project management capabilities.
The unified space and project management system transforms AppFlowy's document organization by introducing:
- Hierarchical space containers for documents and projects
- Fine-grained role-based permissions at the space level
- Integrated project management with kanban boards
- Real-time collaboration with member management
System Architecture Overview
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β AppFlowy Architecture β β β β βββββββββββββββββββ βββββββββββββββββββ βββββββββββββββββββββββββββββ β β β Frontend (Web) β β Backend β β Database Layer β β β β β β β β β β β β βββββββββββββββ β β βββββββββββββββ β β βββββββββββββββββββββββ β β β β βSpace Managerβ ββββββ€ βSpace API β ββββββ€ β af_space_members β β β β β βββββββββββββββ β β βββββββββββββββ β β βββββββββββββββββββββββ β β β β β β β β β β β β βββββββββββββββ β β βββββββββββββββ β β βββββββββββββββββββββββ β β β β βProject View β ββββββ€ βProject API β ββββββ€ β af_project_metadata β β β β β βββββββββββββββ β β βββββββββββββββ β β βββββββββββββββββββββββ β β β β β β β β β β β β βββββββββββββββ β β βββββββββββββββ β β βββββββββββββββββββββββ β β β β βMember Panel β ββββββ€ βPermission β ββββββ€ β af_space_invitationsβ β β β β βββββββββββββββ β β βService β β β βββββββββββββββββββββββ β β β β β β βββββββββββββββ β β β β β βββββββββββββββββββ βββββββββββββββββββ βββββββββββββββββββββββββββββ β β β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β β Collaborative Layer β β β β βββββββββββββββ βββββββββββββββ βββββββββββββββ ββββββββββββββββ β β β β βY.js Docs β βWebSocket β βRedis Cache β βAccess Controlβ β β β β βββββββββββββββ βββββββββββββββ βββββββββββββββ ββββββββββββββββ β β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Data Model Architecture
Core Entities
Entity | Purpose | Key Relationships | Status |
---|---|---|---|
af_space_members | Member roles and permissions for spaces | β af_workspace, af_user | β Implemented |
af_space_invitations | Pending invitations to join spaces | β af_workspace, af_user | β Implemented |
af_project_metadata | Project-specific settings and stats | β af_workspace | β Implemented |
af_project_tasks | Tasks with document integration | β af_project_metadata, af_user | β Implemented |
Permission Model
API Architecture
RESTful Endpoints
/api/spaces/{space_id}/members/invite
Invite new members to a space with specified role
/api/spaces/{space_id}/members
List all space members with roles and user profiles
/api/spaces/{space_id}/members/{member_uid}
Update member role or permissions
/api/spaces/{space_id}/members/{member_uid}
Remove member from space
/api/spaces/{space_id}/permissions/{permission}
Check if user has specific permission in space
/api/space-invitations/{token}/accept
Accept space invitation using invitation token
Technology Stack
Backend
Rust + Actix Web
PostgreSQL
SQLx ORM
Frontend
React + TypeScript
Tailwind CSS
React Query
Collaboration
Y.js Documents
WebSocket
Redis Cache
Database
PostgreSQL 15+
JSONB for settings
UUID primary keys
Implementation Phases
Phase 1: Backend Foundation
Status: β Completed
Deliverables:
- β Database schema with migrations
- β Space member API endpoints
- β Permission system with role-based access
- β Integration with existing workspace system
- β PostgreSQL functions for permission checking
Technical Implementation:
- Created comprehensive database tables (af_space_members, af_space_invitations, af_project_metadata)
- Implemented full REST API in Rust with proper error handling
- Built permission service with caching and context awareness
- Added proper indexes and constraints for performance
Phase 2: Frontend Space Management
Status: β Completed
Delivered Components:
- β Space settings UI with member management panel
- β Member invitation flow with role selection
- β Real-time member list with role editing
- β Permission-based UI visibility controls
- β Integration with existing workspace UI
Technical Implementation:
- React components for member management
- TypeScript interfaces matching backend API
- React Query for API state management
- Tailwind CSS for responsive design
Phase 3: Project Space Implementation
Status: β Completed
Delivered Features:
- β Project space type with kanban board
- β Task management with drag & drop
- β Task-to-document linking
- β Project dashboard with analytics
- β Project templates
Technical Components:
- Kanban board using @dnd-kit library
- Task persistence with database integration
- Real-time updates with Y.js
- Project analytics dashboard
Phase 4: Integration & Migration
Status: β Completed
Delivered Capabilities:
- β Migration tools for existing workspaces
- β Space search and discovery
- β Cross-space navigation
- β Space templates and presets
- β Space usage analytics
Migration Strategy:
- Automatic migration for existing pages to spaces
- Permission mapping from workspace to space level
- Backward compatibility maintained
- Progressive rollout capability
Key Technical Decisions
Architecture Patterns
- Event-Driven Updates: Using WebSocket for real-time member changes
- Permission Caching: Redis cache for permission checks
- Optimistic UI: Frontend updates before server confirmation
- Database Transactions: Ensuring data consistency for space operations
Security Considerations
- Token-Based Invitations: Secure invitation links with expiration
- Row-Level Security: PostgreSQL RLS for data isolation
- Permission Inheritance: Space permissions cascade to content
- Audit Logging: All permission changes are logged
Performance Optimizations
- Lazy Loading: Load space members on demand
- Batch Operations: Bulk invite and permission updates
- Index Strategy: Optimized indexes for permission queries
- Connection Pooling: Efficient database connection management
Future Enhancements
Planned Features
- External Sharing: Share spaces with external users
- Space Analytics: Advanced usage and activity metrics
- Custom Roles: Define custom permission sets
- Space Archiving: Archive inactive spaces
- API Access: Third-party integration support
Monitoring & Metrics
Key Performance Indicators
- Space creation rate
- Member invitation acceptance rate
- Average members per space
- Permission check latency
- API response times
Health Metrics
- Database connection pool usage
- Redis cache hit rate
- WebSocket connection stability
- Error rates by endpoint