Files
Toju/toju-app/AGENTS.md
Myx ee293d7daf
Some checks failed
Deploy Web Apps / deploy (push) Successful in 5m52s
Build Android APK / build-android-apk (push) Failing after 23m15s
Queue Release Build / prepare (push) Successful in 1m42s
Queue Release Build / build-linux (push) Failing after 9m33s
Queue Release Build / build-windows (push) Successful in 26m5s
Queue Release Build / finalize (push) Has been skipped
feat: Rename to Toju and add translation
2026-06-05 17:17:29 +02:00

4.4 KiB

Product Client Guidelines

This package is the Angular 21 renderer for the Toju/MetoYou product client.

Before You Edit

  • Use the root commands from the repository root: npm run build, npm run test, npm run lint, and npm run format for template changes.
  • Read src/app/domains/README.md before adding or moving business logic.
  • See ../doc/typescript.md for shared TypeScript rules.

Architecture

  • Keep business rules in src/app/domains/<name>/domain/.
  • Keep orchestration in src/app/domains/<name>/application/.
  • Keep technical adapters in src/app/domains/<name>/infrastructure/ or src/app/infrastructure/.
  • Keep domain-owned UI in src/app/domains/<name>/feature/ and app-level shells or composition in src/app/features/.
  • Outside a domain, import from src/app/domains/<name>/index.ts instead of internal files.
  • Put cross-domain contracts in src/app/shared-kernel/ when two or more domains need them.

Key Docs

  • src/app/domains/README.md
  • src/app/shared-kernel/README.md
  • src/app/infrastructure/realtime/README.md

Electron Boundary

  • In Angular DI code, use src/app/core/platform/electron/electron-bridge.service.ts.
  • In non-DI renderer helpers, use src/app/core/platform/electron/get-electron-api.ts.
  • When the renderer/Electron contract changes, keep the Angular bridge, preload API, and IPC handlers in sync.

Mobile / Viewport

  • Use ViewportService from src/app/core/platform/viewport.service.ts for mobile/touch detection. Breakpoint is md (max-width 767.98px); exposes isMobile, isTouch, isDesktop signals.
  • Theme-driven grid layouts (appShell, roomLayout, dmLayout) are bypassed on mobile. Do not introduce mobile-specific theme layouts; gate via @if (isMobile()) in templates instead.
  • On mobile discovery routes (/dashboard, /people, /servers, …) the global app.html servers rail stays visible (shouldShowMobileAppServersRail in core/platform/mobile-shell-layout.rules.ts); routed pages render full-width in appWorkspace and must not embed a second <app-servers-rail>/Swiper stack.
  • The mobile chat-room shell (features/room/chat-room) is a 3-page stack (channels -> main -> members); the DM workspace (domains/direct-message/feature/dm-workspace) is 2-page (conversations -> chat). Page state is a component-local signal kept in sync with a Swiper carousel (<swiper-container> / <swiper-slide> from swiper/element/bundle, registered in src/main.ts); both components declare CUSTOM_ELEMENTS_SCHEMA. Chat/DM/call routes keep their embedded rail inside Swiper and hide the global app-shell rail.
  • The Electron-style title bar is hidden on mobile. Screen-share UI must stay hidden on mobile (browsers do not support it reliably on touch devices).
  • Context menus and modal dialogs auto-render as bottom sheets on mobile. ContextMenuComponent and ConfirmDialogComponent (in src/app/shared/components/) inject ViewportService and switch their templates between the desktop popover/centered modal and BottomSheetComponent (src/app/shared/components/bottom-sheet/) on phone-sized viewports. New menus/dialogs should reuse these components rather than rolling their own fixed inset-0 overlay. For one-off bespoke surfaces, render <app-bottom-sheet> directly when isMobile().
  • Tap targets on interactive controls should be at least 44px on mobile. Use min-h-11 (or explicit h-11 w-11) for icon buttons that are tap-only on mobile; desktop sizes can remain smaller via md: overrides.

i18n

  • User-visible UI strings use @ngx-translate/core (same stack as website/). Edit fragment catalogs in public/i18n/catalog/*.json, then run npm run i18n:sync from the repo root to regenerate public/i18n/en.json. Only en ships today.
  • Bootstrap and locale rules: src/app/core/i18n/. Import APP_TRANSLATE_IMPORTS in standalone components that use the translate pipe; use AppI18nService.instant() in TypeScript.
  • Vitest harnesses: provideAppI18nForTests() from src/app/core/i18n/app-i18n.testing.ts.
  • See agents-docs/features/app-i18n.md for the full contract.

Templates

  • If you touch Angular HTML templates, run npm run format.
  • If template property order matters, run npm run sort:props or the matching VS Code task.

Before You Finish

  • Validate whether relevant markdown docs or AGENTS.md files need updates. If behavior, workflows, commands, or architecture changed, update those docs in the same task.