# Toju / Zoracord Desktop chat app with four parts: - `src/` Angular client - `electron/` desktop shell, IPC, and local database - `server/` directory server, join request API, and websocket events - `website/` Toju website served at toju.app ## Install 1. Run `npm install` 2. Run `cd server && npm install` 3. Copy `.env.example` to `.env` ## Config Root `.env`: - `SSL=true` uses HTTPS for Angular, the server, and Electron dev mode - `PORT=3001` changes the server port in local development and overrides the server app setting If `SSL=true`, run `./generate-cert.sh` once. Server files: - `server/data/variables.json` holds `klipyApiKey` - `server/data/variables.json` also holds `releaseManifestUrl` for desktop auto updates - `server/data/variables.json` can now also hold optional `serverHost` (an IP address or hostname to bind to) - `server/data/variables.json` can now also hold `serverProtocol` (`http` or `https`) - `server/data/variables.json` can now also hold `serverPort` (1-65535) - When `serverProtocol` is `https`, the certificate must match the configured `serverHost` or IP ## Main commands - `npm run dev` starts Angular, the server, and Electron - `npm run electron:dev` starts Angular and Electron - `npm run server:dev` starts only the server - `npm run build` builds the Angular client - `npm run build:electron` builds the Electron code - `npm run build:all` builds client, Electron, and server - `npm run lint` runs ESLint - `npm run lint:fix` formats templates, sorts template props, and fixes lint issues - `npm run test` runs Angular tests ## Server project The code in `server/` is a small Node and TypeScript service. It handles the public server directory, join requests, websocket updates, and Klipy routes. Inside `server/`: - `npm run dev` starts the server with reload - `npm run build` compiles to `dist/` - `npm run start` runs the compiled server # Images ## Main Toju app Structure | Path | Description | |------|-------------| | `src/app/` | Main application root | | `src/app/core/` | Core utilities, services, models | | `src/app/domains/` | Domain-driven modules | | `src/app/features/` | UI feature modules | | `src/app/infrastructure/` | Low-level infrastructure (DB, realtime, etc.) | | `src/app/shared/` | Shared UI components | | `src/app/shared-kernel/` | Shared domain contracts & models | | `src/app/store/` | Global state management | | `src/assets/` | Static assets | | `src/environments/` | Environment configs | --- ### Domains | Path | Link | |------|------| | Attachment | [app/domains/attachment/README.md](src/app/domains/attachment/README.md) | | Auth | [app/domains/auth/README.md](src/app/domains/auth/README.md) | | Chat | [app/domains/chat/README.md](src/app/domains/chat/README.md) | | Screen Share | [app/domains/screen-share/README.md](src/app/domains/screen-share/README.md) | | Server Directory | [app/domains/server-directory/README.md](src/app/domains/server-directory/README.md) | | Voice Connection | [app/domains/voice-connection/README.md](src/app/domains/voice-connection/README.md) | | Voice Session | [app/domains/voice-session/README.md](src/app/domains/voice-session/README.md) | | Domains Root | [app/domains/README.md](src/app/domains/README.md) | --- ### Infrastructure | Path | Link | |------|------| | Persistence | [src/app/infrastructure/persistence/README.md](src/app/infrastructure/persistence/README.md) | | Realtime | [src/app/infrastructure/realtime/README.md](src/app/infrastructure/realtime/README.md) | --- ### Shared Kernel | Path | Link | |------|------| | Shared Kernel | [src/app/shared-kernel/README.md](src/app/shared-kernel/README.md) | --- ### Entry Points | File | Link | |------|------| | Main | [main.ts](src/main.ts) | | Index HTML | [index.html](src/index.html) | | App Root | [app/app.ts](src/app/app.ts) |