Skip to main content
Version: Sprint 3

Physical View

The Physical View describes the system's deployment architecture, infrastructure, and runtime environment.

Deployment Diagram - Production Architecture​

The repository defines two deployment workflows: a Vercel Nitro deployment and a Gitea Actions workflow that runs the Nitro Node server in a Node 24 Docker container. The Node-server path attaches the Yjs WebSocket plugin to the Nitro listener.

Deployment Diagram - Build Pipeline​

The CI/CD and build process.

Infrastructure Diagram - Runtime Components​

Runtime components for editing, authenticated APIs, persistence, and collaborative sessions.

Network Diagram - Request Flow​

Page, API, file storage, and collaboration traffic use separate request paths.

Container Diagram - Runtime Isolation​

The self-hosted package contains the Node server and WebSocket upgrade handler. The repository also defines a separate Vercel deployment workflow.

Technology Deployment Matrix​

ComponentTechnologyLocationPurpose
FrontendSolidJS + SolidStart + ViteBrowser and Nitro outputClient UI and server rendering
API / SSRNitro with SolidStartVercel preset or Node 24 containerPages and backend routes
AuthBetter-AuthNitro serverSession and GitHub/Google OAuth
DatabasePostgreSQLExternalUsers, sessions, files, versions
File StorageInternal HTTP APIExternal serviceUser document bytes
CollaborationYjs + y-websocketNitro listener on Node server; configurable URLShared editor state and awareness
Build and deployGitea ActionsVercel or Docker hostMain-branch deployment workflows
TestingVitestDevelopment / CIUnit and component tests

Environment Configuration​

Runtime and service configuration. YJS_WS_PORT is used by the standalone development WebSocket server; production can use Nitro's WebSocket plugin or VITE_YJS_WS_URL to point the browser at a configured endpoint.

File Versioning Architecture​

Versioned file storage uses an external file service for bytes and PostgreSQL for metadata; the latest four versions are retained.

Scaling Considerations​