# Dual-Domain Support **Date:** 2026-05-16 **Status:** Approved ## Goal Serve the portfolio under both `gabrielkaszewski.dev` and `gabrielkaszewski.pl` with identical content. The `.dev` domain is canonical for SEO. ## Changes ### 1. `compose.yml` — Traefik router rule Extend the `Host()` rule to accept both domains and cover both with TLS: ```yaml - "traefik.http.routers.gabrielkaszewski.rule=Host(`gabrielkaszewski.dev`) || Host(`gabrielkaszewski.pl`)" - "traefik.http.routers.gabrielkaszewski.entrypoints=websecure" - "traefik.http.routers.gabrielkaszewski.tls.certresolver=letsencrypt" ``` ### 2. `app/layout.tsx` — canonical metadata Add `alternates.canonical` to the exported `metadata` object: ```ts alternates: { canonical: "https://gabrielkaszewski.dev", }, ``` This injects `` into every page's ``, telling search engines the `.dev` domain is authoritative. ## Out of scope - No redirects — `.pl` serves content directly. - No per-domain content differences. - No changes to OpenGraph or JSON-LD (already hardcoded to `.dev`).