Skip to main content

Frontend Architecture

xTrakt web frontends run on two frameworks. The platform-fe shell embeds product satellites in iframes, and each satellite is deployed independently on its own origin.

Application Inventory

ApplicationFrameworkRole
platform-feAngular 22Shell, navigation, admin console
workflow-feAngular 22Satellite
id-feAngular 22Identity: login, signup, MFA, SAML
sso-client-fe (projects/)Angular 22SSO client
vision-fe, portal-fe, ecm-fe, sign-fe, tickets-fe, template-feVue 3.5 + ViteSatellites
status/webVue 3.5 + VitePublic status page
template-addinVue 3.5 + ViteOffice add-in
sso-client-fe (vue-client/)Vue 3.5 + ViteSSO client

The framework split is under review in ADR R-02 (architecture/adr-r-02-convergencia-frontend.md in this repository, outside the documentation site), which proposes Vue as the single target. Until that ADR is accepted, both stacks are supported and this page describes both.

Shared Across Both Stacks

These hold regardless of framework:

AreaConvention
Design tokens@cogneris-ai/design-tokens — CSS custom properties, framework-agnostic
Auth@cogneris-ai/frontend-auth — framework-agnostic
Components@cogneris-ai/ui-angular or @cogneris-ai/ui-vue, by stack
TestsVitest on both sides — no Karma, no Jest
API parsingBackends may return JSON with Content-Type: text/plain; parse with safeJsonParse<T>()
CompositionSatellites are embedded in iframes by the shell, not by module federation

Canonical theme tokens include --color-primary, --surface-page, --surface-card, --text-muted, --radius-md, and --shadow-card. Legacy aliases remain compatibility-only.

Angular Conventions

AreaConvention
ComponentsStandalone components, no NgModules
StateBehaviorSubject in providedIn: 'root' services
FormsReactive Forms with FormBuilder
i18nTransloco, files in src/assets/i18n/<locale>.json
StylingComponent-scoped SCSS with global tokens in styles.scss
TypeScript6.0

Vue Conventions

AreaConvention
ComponentsSingle-file components, <script setup>
StateComposables (src/composables/use*.ts) — no Pinia
Routervue-router
i18nvue-i18n, files in src/locales/<locale>.json
HTTPaxios
StylingScoped CSS with global tokens
TypeScript5.9

Locales

Both stacks ship the same 15 locales: ar, bn, de, en, es, fr, hi, it, ja, ko, pl, pt-BR / pt, ru, uk, zh.

The Portuguese locale key differs by stack — Angular apps use pt-BR, Vue apps use pt. Check the target app before adding or referencing a translation key.