The Problem
Organizations requiring sovereign file storage with collaboration features—online editing, fine-grained permissions, full-text search across document formats—typically face a choice between commercial SaaS platforms that retain control of data or fragmented open-source alternatives missing critical integration points.
What This Does
This repository contains a self-hosted platform for file storage, synchronization, and collaboration (1197 files). The backend (543 files, TypeScript/NestJS) handles authentication, file operations, document editing integration, and search. The frontend (614 files) provides the web interface. Three document editors are integrated: Collabora Online (backend/src/applications/files/editors/collabora-online/), OnlyOffice (backend/src/applications/files/editors/only-office/), and Euro-Office (docker configs). File content indexing runs through backend/src/applications/files/services/files-content-indexer.service.ts with content parsing via backend/src/applications/files/services/files-content-parser.service.ts and adapter modules covering PDF, Office formats, and HTML. The heuristic analysis flagged backend/src/applications/users/interfaces/user-secrets.interface.ts for secret-shaped paths requiring verification.
How It Is Wired
Execution begins at backend/src/main.ts, which bootstrap the NestJS application via backend/src/app.module.ts. The module graph routes through feature-bound controllers and services. A file upload flows: files.controller.ts → files-manager.service.ts → content parser/adapters → MySQL storage through files-content-store-mysql.service.ts. Full-text search indexes document content via the content parser pipeline; the search manager queries stored index data. Document editing initiates through Collabora or OnlyOffice connectors, each with their own controller, guard, strategy, and module files. The admin scheduler (admin-scheduler.service.ts) appears to coordinate background tasks—quota checks, retention, indexing—but the full dependency graph between scheduler, task queues, and service workers has not been mapped.
What the code touches outside itself: MySQL persistence, three external editor services (Collabora, OnlyOffice, Euro-Office), OAuth providers (OIDC/LDAP), Docker deployment, and reverse proxy configuration (nginx compose files).
INTERNAL CALL GRAPH (key paths)
- File upload:
main.ts→app.module.ts→files.controller.ts→files-manager.service.ts→files-content-parser.service.ts→ adapters →files-content-store-mysql.service.ts - Search:
files-search-manager.service.ts→files-content-indexer.service.ts→ content parser adapters → indexed content in files schema - Collabora editing:
collabora-online.controller.ts→collabora-online-manager.service.ts→ strategy/guard pattern - OnlyOffice editing:
only-office.controller.ts→only-office-manager.service.ts→ strategy/guard pattern
ENTRY POINTS
backend/src/main.ts— NestJS application bootstrapbackend/src/applications/notifications/i18n/index.ts— i18n configurationbackend/src/infrastructure/database/scripts/seed/main.ts— database seedingfrontend/src/main.ts— frontend application bootstrapfrontend/src/index.html— HTML entry point
WHAT EACH FILE IS RESPONSIBLE FOR (representative)
backend/src/app.module.ts— root NestJS module; imports feature modules (files, admin, comments, editors)backend/src/applications/files/files-manager.service.ts— core file CRUD, quarantine, trash, quota enforcementbackend/src/applications/files/services/files-search-manager.service.ts— full-text search orchestrationbackend/src/applications/files/services/files-content-indexer.service.ts— background content indexingbackend/src/applications/files/services/files-content-parser.service.ts— document-to-text conversion via adapter pipelinebackend/src/applications/files/editors/collabora-online/collabora-online.controller.ts— Collabora Online HTTP endpoint and connection managementbackend/src/applications/files/editors/only-office/only-office.controller.ts— OnlyOffice HTTP endpoint and token managementbackend/src/applications/admin/admin-scheduler.service.ts— scheduled maintenance tasksbackend/src/infrastructure/database/scripts/seed/main.ts— initial data population
Configuration
Docker compose files orchestrate the full stack: nginx reverse proxy, Collabora Online, OnlyOffice, and Euro-Office editors. Environment variables for database credentials, JWT secrets, and editor integration keys are required; the actual .env file is not listed in the structure but is conventional for NestJS applications. The docker compose command from the repository root starts all services.
Real-World Use
A legal firm deploying this as a client document portal would configure LDAP authentication for staff accounts, set per-matter storage quotas, enable Collabora Online for real-time redlining of PDFs and Word documents, and use the search function to locate clauses across indexed case files. Guests receive time-limited, password-protected shares for document review without account creation. WebDAV integration allows staff to mount the portal as a network drive in Windows Explorer or macOS Finder.
Code Health & Issues
Low/Security - Secret-shaped paths present in backend/src/applications/users/interfaces/user-secrets.interface.ts — the code-health audit confirms or clears them.
The repository has 95 test files and 4 documented entry points. No license file was visible in the file listing (a LICENSE file exists at root). The NestJS/TypeScript type system provides strong compile-time safety. Docker configuration is extensive across four compose files for editor integration. CI runs on GitHub Actions with test and release workflows.
The Bottom Line
This is a complete, self-hosted file collaboration platform that rivals commercial suites for feature depth. The NestJS backend offers solid architecture and type safety, the three editor integrations provide deployment flexibility, and the docker compose configuration simplifies stack deployment. Configuration overhead is non-trivial—authentication, editor connectors, and quota setup each require attention to environment variables and compose files. Organizations prioritizing data sovereignty with collaboration needs should evaluate; teams needing rapid deployment may find the setup complexity significant.