foundation: project guide, tooling, design tokens, bilingual shell and routing contracts

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-08-25 17:06:51 +02:00
parent 1020ac4c68
commit 42e9f01253
89 changed files with 3615 additions and 297 deletions

View File

@@ -1,28 +1,33 @@
import {Component, computed, HostListener, OnInit, signal} from '@angular/core';
import {RouterOutlet} from '@angular/router';
import {DotBackground} from './components/dot-background/dot-background';
import {DeviceDetectionService} from './service/device-detection-service';
import { ChangeDetectionStrategy, Component, computed, inject, signal } from '@angular/core';
import { RouterLink, RouterLinkActive, RouterOutlet } from '@angular/router';
import { DotBackground } from './components/dot-background/dot-background';
import { SHELL_COPY } from './core/content/shell-copy';
import { SITE_CONFIG } from './core/content/site-config';
import { LOCALE_HTML_LANG, otherLocale } from './core/i18n/locale';
import { LocaleService } from './core/i18n/locale.service';
import { NavigationService } from './core/navigation/navigation.service';
@Component({
selector: 'app-root',
imports: [RouterOutlet, DotBackground],
changeDetection: ChangeDetectionStrategy.OnPush,
imports: [RouterOutlet, RouterLink, RouterLinkActive, DotBackground],
templateUrl: './app.html',
styleUrl: './app.scss'
styleUrl: './app.scss',
})
export class App implements OnInit {
protected readonly title = signal('Portfolio');
protected readonly isMobile = signal(false);
protected readonly isDesktop = computed(() => !this.isMobile());
export class App {
protected readonly navigation = inject(NavigationService);
protected readonly localeService = inject(LocaleService);
protected readonly siteConfig = SITE_CONFIG;
protected readonly navOpen = signal(true);
constructor(private deviceDetectionService: DeviceDetectionService) {
}
protected readonly shell = computed(() => SHELL_COPY[this.localeService.locale()]);
protected readonly otherLocale = computed(() => otherLocale(this.localeService.locale()));
protected readonly otherHtmlLang = computed(() => LOCALE_HTML_LANG[this.otherLocale()]);
protected readonly menuLabel = computed(() =>
this.navOpen() ? this.shell().menuClose : this.shell().menuOpen,
);
ngOnInit(): void {
this.isMobile.set(this.deviceDetectionService.mobileCheck());
}
@HostListener('window:resize')
onResize() {
this.isMobile.set(this.deviceDetectionService.mobileCheck());
protected toggleNav(): void {
this.navOpen.update((open) => !open);
}
}