Bind custom emoji library membership to the signed-in user instead of the client. CustomEmojiService now tracks saved emoji ids per user id in localStorage (metoyou_custom_emoji_saved:<userId>) and the picker only shows the active user's set, seeded on first load from legacy savedByUser rows the user created. This stops a second account on the same client (or Electron's shared SQLite database) from inheriting another user's emoji picker, while keeping synced assets available for message rendering. Adds unit coverage for per-user scoping and a single-page-load Playwright e2e that switches users client-side (second user joins the first user's server) and asserts no library leak. Co-authored-by: Cursor <cursoragent@cursor.com>
Product Client
Angular 21 renderer for MetoYou / Toju. This package is managed from the repository root, so the main build, test, lint, and Electron integration commands are run there rather than from a local package.json.
Commands
npm run startstarts the Angular dev server.npm run buildbuilds the client todist/client.npm run watchruns the Angular build in watch mode.npm run testruns the product-client Vitest suite.npm run lintruns ESLint across the repo.npm run formatformats Angular HTML templates.npm run sort:propssorts Angular template properties.npm run electron:devornpm run devruns the client with Electron.
Structure
| Path | Description |
|---|---|
src/app/domains/ |
Bounded contexts and public domain entry points |
src/app/infrastructure/ |
Shared technical runtime such as persistence and realtime |
src/app/shared-kernel/ |
Cross-domain contracts and shared models |
src/app/features/ |
App-level composition and transitional feature shells |
src/app/core/ |
Platform adapters, compatibility entry points, and cross-domain technical helpers |
src/app/shared/ |
Shared UI primitives and utilities |
src/app/store/ |
NgRx reducers, effects, selectors, and actions |
public/ |
Static assets copied into the Angular build |
Key Docs
- src/app/domains/README.md
- src/app/shared-kernel/README.md
- src/app/infrastructure/persistence/README.md
- src/app/infrastructure/realtime/README.md
- ../docs/architecture.md
- AGENTS.md
Notes
angular.jsondefines build, serve, and lint targets for the product client.- Product-client tests currently run through the root Vitest setup instead of an Angular
testarchitect target. - If the renderer-to-desktop contract changes, update the Angular bridge, Electron preload API, and IPC handlers together.