# MetoYou / Toju MetoYou is a desktop-first chat stack managed as an npm monorepo. The repository contains the Angular 21 product client, the Electron desktop shell, the Node/TypeScript signaling server, the Playwright E2E suite, and the Angular 19 marketing website. ## Packages | Path | Purpose | Docs | | --- | --- | --- | | `toju-app/` | Angular 21 product client | [toju-app/README.md](toju-app/README.md) | | `electron/` | Electron main process, preload bridge, IPC, and desktop integrations | [electron/README.md](electron/README.md) | | `server/` | Signaling server, server-directory API, and websocket runtime | [server/README.md](server/README.md) | | `e2e/` | Playwright end-to-end coverage for the product client | [e2e/README.md](e2e/README.md) | | `website/` | Angular 19 marketing site served separately from the product client | [website/README.md](website/README.md) | ## Install 1. Run `npm install` from the repository root. 2. Run `cd server && npm install` for the server package. 3. If you need to work on the marketing site, run `cd website && npm install`. 4. Copy `.env.example` to `.env`. ## Configuration - Root `.env` controls local SSL with `SSL=true|false`. - The server also honors an optional `PORT` environment override at runtime. - When `SSL=true`, run `./generate-cert.sh` once or let `./dev.sh` generate local certificates on first launch. - `server/data/variables.json` stores `klipyApiKey`, `releaseManifestUrl`, `serverPort`, `serverProtocol`, `serverHost`, and `linkPreview`. The server normalizes this file on startup. - When `serverProtocol` is `https`, the certificates in `.certs/` must exist and match the configured host or IP. ## Main Commands - `npm run dev` starts the full desktop stack: server, product client, and Electron. - `npm run start` starts only the Angular product client in `toju-app/`. - `npm run electron:dev` starts the Angular product client and Electron together. - `npm run server:dev` starts only the server with reload. - `npm run build` builds the Angular product client to `dist/client`. - `npm run build:electron` builds the Electron code to `dist/electron`. - `npm run build:all` builds the product client, Electron, and server. - `npm run test` runs the product-client Vitest suite. - `npm run lint` runs ESLint across the repo. - `npm run lint:fix` formats Angular templates, sorts template properties, and applies ESLint fixes. - `npm run test:e2e`, `npm run test:e2e:ui`, `npm run test:e2e:debug`, and `npm run test:e2e:report` run the Playwright suite and report tooling. ## Repository Map | Path | Description | | --- | --- | | `toju-app/src/app/domains/` | Product-client bounded contexts and domain facades | | `toju-app/src/app/infrastructure/` | Shared client-side technical runtime such as persistence and realtime | | `toju-app/src/app/shared-kernel/` | Cross-domain contracts shared inside the product client | | `electron/` | Electron bootstrap, preload surface, IPC handlers, CQRS, and desktop adapters | | `server/src/` | Express app, websocket runtime, config, CQRS, and persistence layers | | `e2e/` | Playwright tests, helpers, fixtures, and page objects | | `website/src/` | Marketing-site pages, assets, and SSR entry points | | `tools/` | Build, release, formatting, and packaging scripts | ## Product Client Docs | Area | Docs | | --- | --- | | Domains index | [toju-app/src/app/domains/README.md](toju-app/src/app/domains/README.md) | | Access Control | [toju-app/src/app/domains/access-control/README.md](toju-app/src/app/domains/access-control/README.md) | | Attachment | [toju-app/src/app/domains/attachment/README.md](toju-app/src/app/domains/attachment/README.md) | | Authentication | [toju-app/src/app/domains/authentication/README.md](toju-app/src/app/domains/authentication/README.md) | | Chat | [toju-app/src/app/domains/chat/README.md](toju-app/src/app/domains/chat/README.md) | | Notifications | [toju-app/src/app/domains/notifications/README.md](toju-app/src/app/domains/notifications/README.md) | | Profile Avatar | [toju-app/src/app/domains/profile-avatar/README.md](toju-app/src/app/domains/profile-avatar/README.md) | | Screen Share | [toju-app/src/app/domains/screen-share/README.md](toju-app/src/app/domains/screen-share/README.md) | | Server Directory | [toju-app/src/app/domains/server-directory/README.md](toju-app/src/app/domains/server-directory/README.md) | | Theme | [toju-app/src/app/domains/theme/README.md](toju-app/src/app/domains/theme/README.md) | | Voice Connection | [toju-app/src/app/domains/voice-connection/README.md](toju-app/src/app/domains/voice-connection/README.md) | | Voice Session | [toju-app/src/app/domains/voice-session/README.md](toju-app/src/app/domains/voice-session/README.md) | | Persistence | [toju-app/src/app/infrastructure/persistence/README.md](toju-app/src/app/infrastructure/persistence/README.md) | | Realtime | [toju-app/src/app/infrastructure/realtime/README.md](toju-app/src/app/infrastructure/realtime/README.md) | | Shared Kernel | [toju-app/src/app/shared-kernel/README.md](toju-app/src/app/shared-kernel/README.md) | ## Supporting Docs - [doc/monorepo.md](doc/monorepo.md) - [doc/typescript.md](doc/typescript.md) - [docs/architecture.md](docs/architecture.md) ## Screenshots