diff --git a/.claude/rules/frontend/emails.md b/.claude/rules/frontend/emails.md index fe15af1bf..bbcebfc9f 100644 --- a/.claude/rules/frontend/emails.md +++ b/.claude/rules/frontend/emails.md @@ -27,7 +27,7 @@ Guidelines for authoring transactional email templates that ship as Scriban-subs - `` emits the iOS-compatible `@{domain} #{code}` autofill suffix; place it once at the end of the template body so it lands on the last line of the plaintext output - **Exception — HTML attributes and Trans strings.** `` renders a ``, so it cannot live inside attributes like `href` or inside the literal text of a `` marker. In those two cases, hand-write the Scriban placeholder verbatim: - Attribute: `…` (the entire attribute value is a single placeholder) - - Trans string: `{`You have been invited to join '{{'TenantName'}}' on PlatformPlatform`}` — the ICU single-quote escape `'{{'…'}}'` is required so Lingui doesn't mistake `{{TenantName}}` for an ICU placeholder. The same escaped form lands verbatim in the `.po` files + - Trans string: `{`You have been invited to join '{{'TenantName'}}' on '{{'ProductName'}}'`}` — the ICU single-quote escape `'{{'…'}}'` is required so Lingui doesn't mistake `{{TenantName}}` for an ICU placeholder. The same escaped form lands verbatim in the `.po` files 4. Use the Scriban helpers registered in `SharedKernel/Emails/EmailHelpers.cs` for value formatting (called with Scriban pipe syntax): - `amount | format_currency "USD" "en-US"` — both currency code and locale are required @@ -68,9 +68,9 @@ import { Value } from "@repo/emails/helpers/Value"; export default function Welcome({ locale }: { locale: string }) { return ( - + - Welcome to PlatformPlatform + {`Welcome to '{{'ProductName'}}'`} Hi diff --git a/.claude/rules/frontend/translations.md b/.claude/rules/frontend/translations.md index 723544384..68cd42088 100644 --- a/.claude/rules/frontend/translations.md +++ b/.claude/rules/frontend/translations.md @@ -47,7 +47,7 @@ import { Heading } from "@repo/ui/components/Heading"; - Welcome to PlatformPlatform + Welcome to {productName} Dynamic content: {dynamicContent} // ✅ DO: Translate parameterized dynamic content {dynamicContent} // ❌ DON'T: Do not translate completely dynamic content diff --git a/.claude/skills/aspire-stop/SKILL.md b/.claude/skills/aspire-stop/SKILL.md index 455226966..335ef9343 100644 --- a/.claude/skills/aspire-stop/SKILL.md +++ b/.claude/skills/aspire-stop/SKILL.md @@ -14,7 +14,7 @@ Use `developer-cli` exactly as written - do not expand to an absolute worktree p Stops the Aspire AppHost **and** its associated Docker containers (postgres, azurite, mailpit, stripe-cli) - not just the Aspire process. Persistent containers survive a plain `aspire stop` by design, so this skill cleans them up too. - (no flag) - stop the current worktree's stack -- `--all` - stop every PlatformPlatform worktree (via `git worktree list`). Only use when the user explicitly asks to stop everything - never as a default +- `--all` - stop every worktree of this repository (via `git worktree list`). Only use when the user explicitly asks to stop everything - never as a default - `--port ` - stop the worktree on that base port (e.g. `9000`, `9100`, `9200`); also cleans up Docker containers for that port even if the worktree was deleted The flags are mutually exclusive. diff --git a/.claude/skills/create-pull-request/SKILL.md b/.claude/skills/create-pull-request/SKILL.md index 08cac3ae0..5cdc0283f 100644 --- a/.claude/skills/create-pull-request/SKILL.md +++ b/.claude/skills/create-pull-request/SKILL.md @@ -66,7 +66,7 @@ Stash the answers; consumed in STEP 6, 7, 8, 11. Look up `.claude/reference/product-management/[PRODUCT_MANAGEMENT_TOOL].md` for [Task] ID format and MCP tools. -1. **Parse [Task] ID from branch name** (e.g. `pp-(\d+)` for PlatformPlatform; strip `worktree-` first). +1. **Parse [Task] ID from branch name.** The exact pattern depends on the configured [PRODUCT_MANAGEMENT_TOOL] — check `.claude/reference/product-management/[PRODUCT_MANAGEMENT_TOOL].md`. Strip `worktree-` first if present. 2. **If [Task] detected**, fetch via MCP. Use its title, description, and parent [Feature] to validate the draft in STEP 6 and spot drift. @@ -221,17 +221,17 @@ These changes make the system more robust and maintainable. # DON'T: closing sum ### Example 3 - Branch with `worktree-` prefix -Local: `worktree-pp-1208-add-pre-push-hook` -> propose `pp-1208-add-pre-push-hook` (rename in STEP 8, push in STEP 9). +Local: `worktree-fix-login-redirect` -> propose `fix-login-redirect` (rename in STEP 8, push in STEP 9). ### Example 4 - Branch drift -Local: `pp-1208-add-pre-push-hook`. Actual work: refactored install command and added auto-sync. +Local: `fix-login-redirect`. Actual work: refactored the login command and added auto-redirect. -Propose `pp-1208-auto-install-git-hooks-on-pp-install`. Confirm in STEP 4; rename in STEP 8. +Propose `refactor-login-command-with-auto-redirect`. Confirm in STEP 4; rename in STEP 8. ### Example 5 - Unrelated commits -Branch: `pp-1208-add-pre-push-hook`. Commits: hook + an unrelated typo fix in README. +Branch: `fix-login-redirect`. Commits: the redirect fix + an unrelated typo fix in README. Surface the typo commit. Offer to create a new [Task]: "Fix typo in README troubleshooting section" (problem statement, future tense). The pull request continues with both commits. @@ -240,8 +240,8 @@ Surface the typo commit. Offer to create a new [Task]: "Fix typo in README troub ``` Pull request opened: https://github.com///pull/123 -Title: Auto-install committed git hooks into .git/hooks/ via pp install -Labels: Enhancement, Deploy to Staging -[Task]: linked via branch name pp-1208 (auto-detected by [PRODUCT_MANAGEMENT_TOOL]) -Description: /absolute/path/to/repo/.workspace/pp-1208-add-pre-push-hook/pull-request.md +Title: Fix login redirect after OTP verification +Labels: Bug, Deploy to Staging +[Task]: linked via branch name (auto-detected by [PRODUCT_MANAGEMENT_TOOL]) +Description: /absolute/path/to/repo/.workspace/fix-login-redirect/pull-request.md ``` diff --git a/.claude/skills/db-query/SKILL.md b/.claude/skills/db-query/SKILL.md index 19575bddf..e90192858 100644 --- a/.claude/skills/db-query/SKILL.md +++ b/.claude/skills/db-query/SKILL.md @@ -5,7 +5,7 @@ description: Query the local Postgres database of the active Aspire worktree via # Database Query -**Port = `.workspace/port.txt` base + 2. Never trust Aspire MCP for the port — a common critical failure that silently runs SQL on another worktree's database.** +**Port = `.workspace/port.txt` base + 4. Never trust Aspire MCP for the port — a common critical failure that silently runs SQL on another worktree's database.** **Read-only. Every write needs explicit user approval for that exact statement, every time — prior approvals never carry over.** @@ -24,7 +24,7 @@ If `psql --version` fails, tell the user: Aspire must be running. -- Host `localhost`, port = ` + 2` where `` is the integer in `.workspace/port.txt`. +- Host `localhost`, port = ` + 4` where `` is the integer in `.workspace/port.txt`. - User `postgres`. - Password: `export PGPASSWORD=$(dotnet user-secrets list --project application/AppHost/AppHost.csproj | sed -n 's/^postgres-password = //p')` (keeps it out of shell history). diff --git a/.claude/skills/rebrand/SKILL.md b/.claude/skills/rebrand/SKILL.md new file mode 100644 index 000000000..b6d49fe88 --- /dev/null +++ b/.claude/skills/rebrand/SKILL.md @@ -0,0 +1,210 @@ +--- +name: rebrand +description: Apply a downstream brand to a PlatformPlatform fork. Edits one config file, drops in eight supplied logo assets, renames the solution and CLI to the new brand, and rotates UserSecretsId across every csproj. Skips all other source files. Use once per downstream fork after cloning, or to re-flip a brand later. +allowed-tools: Read, Write, Edit, Bash, AskUserQuestion +--- + +# Rebrand + +Apply a downstream brand to a PlatformPlatform fork. The rebrand is intentionally narrow: brand values live in one JSONC file, logo assets live at canonical paths, and a handful of names (solution file, CLI alias, UserSecretsId, Docker prefix) flip in lockstep. Source code is not touched. + +This skill expects the upstream canonical layout — primary logos named `logo-{light,dark}-88.png` and square marks named `logo-mark-{light,dark}-192.png`. If you are on an older PlatformPlatform that still uses `logo-wrap-*` or `-512` mark names, the upstream needs the one-time rename first. + +## STEP 1: Verify a clean working tree + +```bash +git status --porcelain +``` + +Stop if there is anything staged or unstaged. Rebrand touches many files at once and a mid-rebrand merge with unrelated changes is hard to untangle. + +## STEP 2: Collect inputs + +Use AskUserQuestion to collect all values up front. Do not write anything until every value is in hand — otherwise a partial rebrand leaves the fork in a broken state. + +Required inputs: + +1. **Product name** — proper-cased product label shown in UI, emails, page titles. Example: `Acme`. +2. **CLI alias** — short lowercase shell alias replacing `pp`. Example: `acme`. No spaces, no dashes inside the binary name. +3. **Solution name** — base filename for `PlatformPlatform.slnx`. Example: `Acme` (yielding `Acme.slnx`). +4. **Internal email domain** — `@example.com` (leading `@` required). Classifies users as internal for telemetry segmentation. BackOffice access is controlled by Entra ID, not by this setting. +5. **Taglines** — one-line product descriptions split across two channels and per locale: + - `tagline.web.` — shown in the landing page footer (consumer reads the active Lingui locale). + - `tagline.mail.` — shown in the email footer (renderer reads the template's locale). + The two maps must list the SAME locales (backend fails loud at startup if they diverge); the en-US value is REQUIRED. Collect en-US and da-DK for both channels — for downstream brands the web and mail copy will often differ (e.g. the email leans toward the recipient context). For PlatformPlatform itself, web == mail. +6. **Primary color** — four CSS color expressions (oklch / hex / hsl / rgb all valid) under `branding.primaryColor`: `light`, `lightForeground`, `dark`, `darkForeground`. Drives the "button color" and its on-color text in both light and dark modes. The value flows through theme.css via an inline ` - + + diff --git a/application/account/BackOffice/public/manifest.json b/application/account/BackOffice/public/manifest.json index ac8b813d4..2203d3469 100644 --- a/application/account/BackOffice/public/manifest.json +++ b/application/account/BackOffice/public/manifest.json @@ -1,12 +1,12 @@ { - "name": "Back Office", - "short_name": "Back Office", - "description": "PlatformPlatform Application", + "name": "__PRODUCT_NAME__ Back Office", + "short_name": "__PRODUCT_NAME__", + "description": "__PRODUCT_NAME__ Back Office", "start_url": "/", "display": "standalone", "orientation": "portrait", - "theme_color": "#000000", - "background_color": "#ffffff", + "theme_color": "__THEME_COLOR__", + "background_color": "__BACKGROUND_COLOR__", "icons": [ { "src": "/favicon.ico", diff --git a/application/account/BackOffice/routes/__root.tsx b/application/account/BackOffice/routes/__root.tsx index edcd7cd95..6b215c1c0 100644 --- a/application/account/BackOffice/routes/__root.tsx +++ b/application/account/BackOffice/routes/__root.tsx @@ -1,5 +1,6 @@ import { PageTracker } from "@repo/infrastructure/applicationInsights/PageTracker"; import { AuthenticationProvider } from "@repo/infrastructure/auth/AuthenticationProvider"; +import { themeColor } from "@repo/infrastructure/branding"; import { useErrorTrigger } from "@repo/infrastructure/development/useErrorTrigger"; import { useInitializeLocale } from "@repo/infrastructure/translations/useInitializeLocale"; import { BannerPortal } from "@repo/ui/components/BannerPortal"; @@ -25,7 +26,7 @@ function Root() { return ( - + navigate(options)}> diff --git a/application/account/WebApp/routes/components.tsx b/application/account/BackOffice/routes/components.tsx similarity index 100% rename from application/account/WebApp/routes/components.tsx rename to application/account/BackOffice/routes/components.tsx diff --git a/application/account/WebApp/routes/components/-components/AccordionPreview.tsx b/application/account/BackOffice/routes/components/-components/AccordionPreview.tsx similarity index 100% rename from application/account/WebApp/routes/components/-components/AccordionPreview.tsx rename to application/account/BackOffice/routes/components/-components/AccordionPreview.tsx diff --git a/application/account/WebApp/routes/components/-components/AlertDialogsPreview.tsx b/application/account/BackOffice/routes/components/-components/AlertDialogsPreview.tsx similarity index 100% rename from application/account/WebApp/routes/components/-components/AlertDialogsPreview.tsx rename to application/account/BackOffice/routes/components/-components/AlertDialogsPreview.tsx diff --git a/application/account/WebApp/routes/components/-components/AlertsBadgesPreview.tsx b/application/account/BackOffice/routes/components/-components/AlertsBadgesPreview.tsx similarity index 100% rename from application/account/WebApp/routes/components/-components/AlertsBadgesPreview.tsx rename to application/account/BackOffice/routes/components/-components/AlertsBadgesPreview.tsx diff --git a/application/account/WebApp/routes/components/-components/AspectRatioPreview.tsx b/application/account/BackOffice/routes/components/-components/AspectRatioPreview.tsx similarity index 100% rename from application/account/WebApp/routes/components/-components/AspectRatioPreview.tsx rename to application/account/BackOffice/routes/components/-components/AspectRatioPreview.tsx diff --git a/application/account/WebApp/routes/components/-components/AvatarPreview.tsx b/application/account/BackOffice/routes/components/-components/AvatarPreview.tsx similarity index 100% rename from application/account/WebApp/routes/components/-components/AvatarPreview.tsx rename to application/account/BackOffice/routes/components/-components/AvatarPreview.tsx diff --git a/application/account/WebApp/routes/components/-components/AvatarUpload.tsx b/application/account/BackOffice/routes/components/-components/AvatarUpload.tsx similarity index 100% rename from application/account/WebApp/routes/components/-components/AvatarUpload.tsx rename to application/account/BackOffice/routes/components/-components/AvatarUpload.tsx diff --git a/application/account/WebApp/routes/components/-components/ButtonGroupPreview.tsx b/application/account/BackOffice/routes/components/-components/ButtonGroupPreview.tsx similarity index 100% rename from application/account/WebApp/routes/components/-components/ButtonGroupPreview.tsx rename to application/account/BackOffice/routes/components/-components/ButtonGroupPreview.tsx diff --git a/application/account/WebApp/routes/components/-components/ButtonsPreview.tsx b/application/account/BackOffice/routes/components/-components/ButtonsPreview.tsx similarity index 100% rename from application/account/WebApp/routes/components/-components/ButtonsPreview.tsx rename to application/account/BackOffice/routes/components/-components/ButtonsPreview.tsx diff --git a/application/account/WebApp/routes/components/-components/CardsPreview.tsx b/application/account/BackOffice/routes/components/-components/CardsPreview.tsx similarity index 100% rename from application/account/WebApp/routes/components/-components/CardsPreview.tsx rename to application/account/BackOffice/routes/components/-components/CardsPreview.tsx diff --git a/application/account/WebApp/routes/components/-components/CategorizationStep.tsx b/application/account/BackOffice/routes/components/-components/CategorizationStep.tsx similarity index 100% rename from application/account/WebApp/routes/components/-components/CategorizationStep.tsx rename to application/account/BackOffice/routes/components/-components/CategorizationStep.tsx diff --git a/application/account/WebApp/routes/components/-components/ChartAreaInteractivePreview.tsx b/application/account/BackOffice/routes/components/-components/ChartAreaInteractivePreview.tsx similarity index 100% rename from application/account/WebApp/routes/components/-components/ChartAreaInteractivePreview.tsx rename to application/account/BackOffice/routes/components/-components/ChartAreaInteractivePreview.tsx diff --git a/application/account/WebApp/routes/components/-components/ChartBarInteractivePreview.tsx b/application/account/BackOffice/routes/components/-components/ChartBarInteractivePreview.tsx similarity index 100% rename from application/account/WebApp/routes/components/-components/ChartBarInteractivePreview.tsx rename to application/account/BackOffice/routes/components/-components/ChartBarInteractivePreview.tsx diff --git a/application/account/WebApp/routes/components/-components/ChartBarStackedPreview.tsx b/application/account/BackOffice/routes/components/-components/ChartBarStackedPreview.tsx similarity index 100% rename from application/account/WebApp/routes/components/-components/ChartBarStackedPreview.tsx rename to application/account/BackOffice/routes/components/-components/ChartBarStackedPreview.tsx diff --git a/application/account/WebApp/routes/components/-components/ChartPieDonutTextPreview.tsx b/application/account/BackOffice/routes/components/-components/ChartPieDonutTextPreview.tsx similarity index 100% rename from application/account/WebApp/routes/components/-components/ChartPieDonutTextPreview.tsx rename to application/account/BackOffice/routes/components/-components/ChartPieDonutTextPreview.tsx diff --git a/application/account/WebApp/routes/components/-components/ChartRadialShapePreview.tsx b/application/account/BackOffice/routes/components/-components/ChartRadialShapePreview.tsx similarity index 100% rename from application/account/WebApp/routes/components/-components/ChartRadialShapePreview.tsx rename to application/account/BackOffice/routes/components/-components/ChartRadialShapePreview.tsx diff --git a/application/account/WebApp/routes/components/-components/ChartRadialStackedPreview.tsx b/application/account/BackOffice/routes/components/-components/ChartRadialStackedPreview.tsx similarity index 100% rename from application/account/WebApp/routes/components/-components/ChartRadialStackedPreview.tsx rename to application/account/BackOffice/routes/components/-components/ChartRadialStackedPreview.tsx diff --git a/application/account/WebApp/routes/components/-components/ChartsPreview.tsx b/application/account/BackOffice/routes/components/-components/ChartsPreview.tsx similarity index 100% rename from application/account/WebApp/routes/components/-components/ChartsPreview.tsx rename to application/account/BackOffice/routes/components/-components/ChartsPreview.tsx diff --git a/application/account/WebApp/routes/components/-components/ComboboxFields.tsx b/application/account/BackOffice/routes/components/-components/ComboboxFields.tsx similarity index 100% rename from application/account/WebApp/routes/components/-components/ComboboxFields.tsx rename to application/account/BackOffice/routes/components/-components/ComboboxFields.tsx diff --git a/application/account/WebApp/routes/components/-components/CommandPreview.tsx b/application/account/BackOffice/routes/components/-components/CommandPreview.tsx similarity index 100% rename from application/account/WebApp/routes/components/-components/CommandPreview.tsx rename to application/account/BackOffice/routes/components/-components/CommandPreview.tsx diff --git a/application/account/WebApp/routes/components/-components/ComponentPreview.tsx b/application/account/BackOffice/routes/components/-components/ComponentPreview.tsx similarity index 100% rename from application/account/WebApp/routes/components/-components/ComponentPreview.tsx rename to application/account/BackOffice/routes/components/-components/ComponentPreview.tsx diff --git a/application/account/WebApp/routes/components/-components/ComponentsCollapsibleMenu.tsx b/application/account/BackOffice/routes/components/-components/ComponentsCollapsibleMenu.tsx similarity index 100% rename from application/account/WebApp/routes/components/-components/ComponentsCollapsibleMenu.tsx rename to application/account/BackOffice/routes/components/-components/ComponentsCollapsibleMenu.tsx diff --git a/application/account/WebApp/routes/components/-components/ComponentsSideMenu.tsx b/application/account/BackOffice/routes/components/-components/ComponentsSideMenu.tsx similarity index 100% rename from application/account/WebApp/routes/components/-components/ComponentsSideMenu.tsx rename to application/account/BackOffice/routes/components/-components/ComponentsSideMenu.tsx diff --git a/application/account/WebApp/routes/components/-components/ControlRow.tsx b/application/account/BackOffice/routes/components/-components/ControlRow.tsx similarity index 100% rename from application/account/WebApp/routes/components/-components/ControlRow.tsx rename to application/account/BackOffice/routes/components/-components/ControlRow.tsx diff --git a/application/account/WebApp/routes/components/-components/ControlsPreview.tsx b/application/account/BackOffice/routes/components/-components/ControlsPreview.tsx similarity index 100% rename from application/account/WebApp/routes/components/-components/ControlsPreview.tsx rename to application/account/BackOffice/routes/components/-components/ControlsPreview.tsx diff --git a/application/account/WebApp/routes/components/-components/CookingDetailsStep.tsx b/application/account/BackOffice/routes/components/-components/CookingDetailsStep.tsx similarity index 100% rename from application/account/WebApp/routes/components/-components/CookingDetailsStep.tsx rename to application/account/BackOffice/routes/components/-components/CookingDetailsStep.tsx diff --git a/application/account/WebApp/routes/components/-components/DateAndToggleFields.tsx b/application/account/BackOffice/routes/components/-components/DateAndToggleFields.tsx similarity index 100% rename from application/account/WebApp/routes/components/-components/DateAndToggleFields.tsx rename to application/account/BackOffice/routes/components/-components/DateAndToggleFields.tsx diff --git a/application/account/WebApp/routes/components/-components/DateFormatPreview.tsx b/application/account/BackOffice/routes/components/-components/DateFormatPreview.tsx similarity index 100% rename from application/account/WebApp/routes/components/-components/DateFormatPreview.tsx rename to application/account/BackOffice/routes/components/-components/DateFormatPreview.tsx diff --git a/application/account/WebApp/routes/components/-components/DialogsPreview.tsx b/application/account/BackOffice/routes/components/-components/DialogsPreview.tsx similarity index 100% rename from application/account/WebApp/routes/components/-components/DialogsPreview.tsx rename to application/account/BackOffice/routes/components/-components/DialogsPreview.tsx diff --git a/application/account/WebApp/routes/components/-components/DishDetailsSidePane.tsx b/application/account/BackOffice/routes/components/-components/DishDetailsSidePane.tsx similarity index 100% rename from application/account/WebApp/routes/components/-components/DishDetailsSidePane.tsx rename to application/account/BackOffice/routes/components/-components/DishDetailsSidePane.tsx diff --git a/application/account/WebApp/routes/components/-components/DishMultiSelectSidePane.tsx b/application/account/BackOffice/routes/components/-components/DishMultiSelectSidePane.tsx similarity index 100% rename from application/account/WebApp/routes/components/-components/DishMultiSelectSidePane.tsx rename to application/account/BackOffice/routes/components/-components/DishMultiSelectSidePane.tsx diff --git a/application/account/WebApp/routes/components/-components/DishRow.tsx b/application/account/BackOffice/routes/components/-components/DishRow.tsx similarity index 100% rename from application/account/WebApp/routes/components/-components/DishRow.tsx rename to application/account/BackOffice/routes/components/-components/DishRow.tsx diff --git a/application/account/WebApp/routes/components/-components/DrawerPreview.tsx b/application/account/BackOffice/routes/components/-components/DrawerPreview.tsx similarity index 100% rename from application/account/WebApp/routes/components/-components/DrawerPreview.tsx rename to application/account/BackOffice/routes/components/-components/DrawerPreview.tsx diff --git a/application/account/WebApp/routes/components/-components/DropzonePreview.tsx b/application/account/BackOffice/routes/components/-components/DropzonePreview.tsx similarity index 100% rename from application/account/WebApp/routes/components/-components/DropzonePreview.tsx rename to application/account/BackOffice/routes/components/-components/DropzonePreview.tsx diff --git a/application/account/WebApp/routes/components/-components/EmailsPreview.tsx b/application/account/BackOffice/routes/components/-components/EmailsPreview.tsx similarity index 100% rename from application/account/WebApp/routes/components/-components/EmailsPreview.tsx rename to application/account/BackOffice/routes/components/-components/EmailsPreview.tsx diff --git a/application/account/WebApp/routes/components/-components/EmptyPreview.tsx b/application/account/BackOffice/routes/components/-components/EmptyPreview.tsx similarity index 100% rename from application/account/WebApp/routes/components/-components/EmptyPreview.tsx rename to application/account/BackOffice/routes/components/-components/EmptyPreview.tsx diff --git a/application/account/WebApp/routes/components/-components/ExamplesPreview.tsx b/application/account/BackOffice/routes/components/-components/ExamplesPreview.tsx similarity index 100% rename from application/account/WebApp/routes/components/-components/ExamplesPreview.tsx rename to application/account/BackOffice/routes/components/-components/ExamplesPreview.tsx diff --git a/application/account/WebApp/routes/components/-components/HoverCardPreview.tsx b/application/account/BackOffice/routes/components/-components/HoverCardPreview.tsx similarity index 100% rename from application/account/WebApp/routes/components/-components/HoverCardPreview.tsx rename to application/account/BackOffice/routes/components/-components/HoverCardPreview.tsx diff --git a/application/account/WebApp/routes/components/-components/InlineCalendarPreview.tsx b/application/account/BackOffice/routes/components/-components/InlineCalendarPreview.tsx similarity index 100% rename from application/account/WebApp/routes/components/-components/InlineCalendarPreview.tsx rename to application/account/BackOffice/routes/components/-components/InlineCalendarPreview.tsx diff --git a/application/account/WebApp/routes/components/-components/ItemPreview.tsx b/application/account/BackOffice/routes/components/-components/ItemPreview.tsx similarity index 100% rename from application/account/WebApp/routes/components/-components/ItemPreview.tsx rename to application/account/BackOffice/routes/components/-components/ItemPreview.tsx diff --git a/application/account/WebApp/routes/components/-components/KbdPreview.tsx b/application/account/BackOffice/routes/components/-components/KbdPreview.tsx similarity index 100% rename from application/account/WebApp/routes/components/-components/KbdPreview.tsx rename to application/account/BackOffice/routes/components/-components/KbdPreview.tsx diff --git a/application/account/WebApp/routes/components/-components/LinkCardPreview.tsx b/application/account/BackOffice/routes/components/-components/LinkCardPreview.tsx similarity index 100% rename from application/account/WebApp/routes/components/-components/LinkCardPreview.tsx rename to application/account/BackOffice/routes/components/-components/LinkCardPreview.tsx diff --git a/application/account/WebApp/routes/components/-components/LinkPreview.tsx b/application/account/BackOffice/routes/components/-components/LinkPreview.tsx similarity index 100% rename from application/account/WebApp/routes/components/-components/LinkPreview.tsx rename to application/account/BackOffice/routes/components/-components/LinkPreview.tsx diff --git a/application/account/WebApp/routes/components/-components/MediaTab.tsx b/application/account/BackOffice/routes/components/-components/MediaTab.tsx similarity index 100% rename from application/account/WebApp/routes/components/-components/MediaTab.tsx rename to application/account/BackOffice/routes/components/-components/MediaTab.tsx diff --git a/application/account/WebApp/routes/components/-components/NavigationMenuPreview.tsx b/application/account/BackOffice/routes/components/-components/NavigationMenuPreview.tsx similarity index 100% rename from application/account/WebApp/routes/components/-components/NavigationMenuPreview.tsx rename to application/account/BackOffice/routes/components/-components/NavigationMenuPreview.tsx diff --git a/application/account/WebApp/routes/components/-components/NavigationPreview.tsx b/application/account/BackOffice/routes/components/-components/NavigationPreview.tsx similarity index 100% rename from application/account/WebApp/routes/components/-components/NavigationPreview.tsx rename to application/account/BackOffice/routes/components/-components/NavigationPreview.tsx diff --git a/application/account/WebApp/routes/components/-components/OverlaysPreview.tsx b/application/account/BackOffice/routes/components/-components/OverlaysPreview.tsx similarity index 100% rename from application/account/WebApp/routes/components/-components/OverlaysPreview.tsx rename to application/account/BackOffice/routes/components/-components/OverlaysPreview.tsx diff --git a/application/account/WebApp/routes/components/-components/PreviewAvatarMenu.tsx b/application/account/BackOffice/routes/components/-components/PreviewAvatarMenu.tsx similarity index 100% rename from application/account/WebApp/routes/components/-components/PreviewAvatarMenu.tsx rename to application/account/BackOffice/routes/components/-components/PreviewAvatarMenu.tsx diff --git a/application/account/WebApp/routes/components/-components/PreviewHeader.tsx b/application/account/BackOffice/routes/components/-components/PreviewHeader.tsx similarity index 100% rename from application/account/WebApp/routes/components/-components/PreviewHeader.tsx rename to application/account/BackOffice/routes/components/-components/PreviewHeader.tsx diff --git a/application/account/WebApp/routes/components/-components/PreviewMobileMenu.tsx b/application/account/BackOffice/routes/components/-components/PreviewMobileMenu.tsx similarity index 100% rename from application/account/WebApp/routes/components/-components/PreviewMobileMenu.tsx rename to application/account/BackOffice/routes/components/-components/PreviewMobileMenu.tsx diff --git a/application/account/WebApp/routes/components/-components/PreviewSettingsFlyouts.tsx b/application/account/BackOffice/routes/components/-components/PreviewSettingsFlyouts.tsx similarity index 100% rename from application/account/WebApp/routes/components/-components/PreviewSettingsFlyouts.tsx rename to application/account/BackOffice/routes/components/-components/PreviewSettingsFlyouts.tsx diff --git a/application/account/WebApp/routes/components/-components/ProgressPreview.tsx b/application/account/BackOffice/routes/components/-components/ProgressPreview.tsx similarity index 100% rename from application/account/WebApp/routes/components/-components/ProgressPreview.tsx rename to application/account/BackOffice/routes/components/-components/ProgressPreview.tsx diff --git a/application/account/WebApp/routes/components/-components/PropTooltip.tsx b/application/account/BackOffice/routes/components/-components/PropTooltip.tsx similarity index 100% rename from application/account/WebApp/routes/components/-components/PropTooltip.tsx rename to application/account/BackOffice/routes/components/-components/PropTooltip.tsx diff --git a/application/account/WebApp/routes/components/-components/RecipeEditorDialog.tsx b/application/account/BackOffice/routes/components/-components/RecipeEditorDialog.tsx similarity index 100% rename from application/account/WebApp/routes/components/-components/RecipeEditorDialog.tsx rename to application/account/BackOffice/routes/components/-components/RecipeEditorDialog.tsx diff --git a/application/account/WebApp/routes/components/-components/RecipeInfoStep.tsx b/application/account/BackOffice/routes/components/-components/RecipeInfoStep.tsx similarity index 100% rename from application/account/WebApp/routes/components/-components/RecipeInfoStep.tsx rename to application/account/BackOffice/routes/components/-components/RecipeInfoStep.tsx diff --git a/application/account/WebApp/routes/components/-components/ResizablePreview.tsx b/application/account/BackOffice/routes/components/-components/ResizablePreview.tsx similarity index 100% rename from application/account/WebApp/routes/components/-components/ResizablePreview.tsx rename to application/account/BackOffice/routes/components/-components/ResizablePreview.tsx diff --git a/application/account/WebApp/routes/components/-components/SelectAndComboboxFields.tsx b/application/account/BackOffice/routes/components/-components/SelectAndComboboxFields.tsx similarity index 100% rename from application/account/WebApp/routes/components/-components/SelectAndComboboxFields.tsx rename to application/account/BackOffice/routes/components/-components/SelectAndComboboxFields.tsx diff --git a/application/account/WebApp/routes/components/-components/ShareRecipeDialog.tsx b/application/account/BackOffice/routes/components/-components/ShareRecipeDialog.tsx similarity index 100% rename from application/account/WebApp/routes/components/-components/ShareRecipeDialog.tsx rename to application/account/BackOffice/routes/components/-components/ShareRecipeDialog.tsx diff --git a/application/account/WebApp/routes/components/-components/SheetPreview.tsx b/application/account/BackOffice/routes/components/-components/SheetPreview.tsx similarity index 100% rename from application/account/WebApp/routes/components/-components/SheetPreview.tsx rename to application/account/BackOffice/routes/components/-components/SheetPreview.tsx diff --git a/application/account/WebApp/routes/components/-components/SidePanePreview.tsx b/application/account/BackOffice/routes/components/-components/SidePanePreview.tsx similarity index 100% rename from application/account/WebApp/routes/components/-components/SidePanePreview.tsx rename to application/account/BackOffice/routes/components/-components/SidePanePreview.tsx diff --git a/application/account/WebApp/routes/components/-components/SidebarPreview.tsx b/application/account/BackOffice/routes/components/-components/SidebarPreview.tsx similarity index 100% rename from application/account/WebApp/routes/components/-components/SidebarPreview.tsx rename to application/account/BackOffice/routes/components/-components/SidebarPreview.tsx diff --git a/application/account/WebApp/routes/components/-components/SkeletonPreview.tsx b/application/account/BackOffice/routes/components/-components/SkeletonPreview.tsx similarity index 100% rename from application/account/WebApp/routes/components/-components/SkeletonPreview.tsx rename to application/account/BackOffice/routes/components/-components/SkeletonPreview.tsx diff --git a/application/account/WebApp/routes/components/-components/SpinnerPreview.tsx b/application/account/BackOffice/routes/components/-components/SpinnerPreview.tsx similarity index 100% rename from application/account/WebApp/routes/components/-components/SpinnerPreview.tsx rename to application/account/BackOffice/routes/components/-components/SpinnerPreview.tsx diff --git a/application/account/WebApp/routes/components/-components/SplitButtons.tsx b/application/account/BackOffice/routes/components/-components/SplitButtons.tsx similarity index 100% rename from application/account/WebApp/routes/components/-components/SplitButtons.tsx rename to application/account/BackOffice/routes/components/-components/SplitButtons.tsx diff --git a/application/account/WebApp/routes/components/-components/TablePreview.tsx b/application/account/BackOffice/routes/components/-components/TablePreview.tsx similarity index 100% rename from application/account/WebApp/routes/components/-components/TablePreview.tsx rename to application/account/BackOffice/routes/components/-components/TablePreview.tsx diff --git a/application/account/WebApp/routes/components/-components/TablePreviewHeader.tsx b/application/account/BackOffice/routes/components/-components/TablePreviewHeader.tsx similarity index 100% rename from application/account/WebApp/routes/components/-components/TablePreviewHeader.tsx rename to application/account/BackOffice/routes/components/-components/TablePreviewHeader.tsx diff --git a/application/account/WebApp/routes/components/-components/TablePreviewToolbar.tsx b/application/account/BackOffice/routes/components/-components/TablePreviewToolbar.tsx similarity index 100% rename from application/account/WebApp/routes/components/-components/TablePreviewToolbar.tsx rename to application/account/BackOffice/routes/components/-components/TablePreviewToolbar.tsx diff --git a/application/account/WebApp/routes/components/-components/TabsPreview.tsx b/application/account/BackOffice/routes/components/-components/TabsPreview.tsx similarity index 100% rename from application/account/WebApp/routes/components/-components/TabsPreview.tsx rename to application/account/BackOffice/routes/components/-components/TabsPreview.tsx diff --git a/application/account/WebApp/routes/components/-components/TextAreaFields.tsx b/application/account/BackOffice/routes/components/-components/TextAreaFields.tsx similarity index 100% rename from application/account/WebApp/routes/components/-components/TextAreaFields.tsx rename to application/account/BackOffice/routes/components/-components/TextAreaFields.tsx diff --git a/application/account/WebApp/routes/components/-components/ToggleGroupField.tsx b/application/account/BackOffice/routes/components/-components/ToggleGroupField.tsx similarity index 100% rename from application/account/WebApp/routes/components/-components/ToggleGroupField.tsx rename to application/account/BackOffice/routes/components/-components/ToggleGroupField.tsx diff --git a/application/account/WebApp/routes/components/-components/TogglesPreview.tsx b/application/account/BackOffice/routes/components/-components/TogglesPreview.tsx similarity index 100% rename from application/account/WebApp/routes/components/-components/TogglesPreview.tsx rename to application/account/BackOffice/routes/components/-components/TogglesPreview.tsx diff --git a/application/account/WebApp/routes/components/-components/WorkdayPicker.tsx b/application/account/BackOffice/routes/components/-components/WorkdayPicker.tsx similarity index 100% rename from application/account/WebApp/routes/components/-components/WorkdayPicker.tsx rename to application/account/BackOffice/routes/components/-components/WorkdayPicker.tsx diff --git a/application/account/WebApp/routes/components/-components/chartSampleData.ts b/application/account/BackOffice/routes/components/-components/chartSampleData.ts similarity index 100% rename from application/account/WebApp/routes/components/-components/chartSampleData.ts rename to application/account/BackOffice/routes/components/-components/chartSampleData.ts diff --git a/application/account/WebApp/routes/components/-components/controlRowTypes.ts b/application/account/BackOffice/routes/components/-components/controlRowTypes.ts similarity index 100% rename from application/account/WebApp/routes/components/-components/controlRowTypes.ts rename to application/account/BackOffice/routes/components/-components/controlRowTypes.ts diff --git a/application/account/WebApp/routes/components/-components/controlTooltips.tsx b/application/account/BackOffice/routes/components/-components/controlTooltips.tsx similarity index 100% rename from application/account/WebApp/routes/components/-components/controlTooltips.tsx rename to application/account/BackOffice/routes/components/-components/controlTooltips.tsx diff --git a/application/account/WebApp/routes/components/-components/dialogSize.ts b/application/account/BackOffice/routes/components/-components/dialogSize.ts similarity index 100% rename from application/account/WebApp/routes/components/-components/dialogSize.ts rename to application/account/BackOffice/routes/components/-components/dialogSize.ts diff --git a/application/account/WebApp/routes/components/-components/mediaImages.ts b/application/account/BackOffice/routes/components/-components/mediaImages.ts similarity index 100% rename from application/account/WebApp/routes/components/-components/mediaImages.ts rename to application/account/BackOffice/routes/components/-components/mediaImages.ts diff --git a/application/account/WebApp/routes/components/-components/previewSections.tsx b/application/account/BackOffice/routes/components/-components/previewSections.tsx similarity index 100% rename from application/account/WebApp/routes/components/-components/previewSections.tsx rename to application/account/BackOffice/routes/components/-components/previewSections.tsx diff --git a/application/account/WebApp/routes/components/-components/sampleDishData.ts b/application/account/BackOffice/routes/components/-components/sampleDishData.ts similarity index 100% rename from application/account/WebApp/routes/components/-components/sampleDishData.ts rename to application/account/BackOffice/routes/components/-components/sampleDishData.ts diff --git a/application/account/WebApp/routes/components/-components/sampleRecipeData.tsx b/application/account/BackOffice/routes/components/-components/sampleRecipeData.tsx similarity index 100% rename from application/account/WebApp/routes/components/-components/sampleRecipeData.tsx rename to application/account/BackOffice/routes/components/-components/sampleRecipeData.tsx diff --git a/application/account/WebApp/routes/components/charts.tsx b/application/account/BackOffice/routes/components/charts.tsx similarity index 100% rename from application/account/WebApp/routes/components/charts.tsx rename to application/account/BackOffice/routes/components/charts.tsx diff --git a/application/account/WebApp/routes/components/emails.tsx b/application/account/BackOffice/routes/components/emails.tsx similarity index 100% rename from application/account/WebApp/routes/components/emails.tsx rename to application/account/BackOffice/routes/components/emails.tsx diff --git a/application/account/WebApp/routes/components/examples.tsx b/application/account/BackOffice/routes/components/examples.tsx similarity index 100% rename from application/account/WebApp/routes/components/examples.tsx rename to application/account/BackOffice/routes/components/examples.tsx diff --git a/application/account/WebApp/routes/components/index.tsx b/application/account/BackOffice/routes/components/index.tsx similarity index 100% rename from application/account/WebApp/routes/components/index.tsx rename to application/account/BackOffice/routes/components/index.tsx diff --git a/application/account/BackOffice/routes/login.tsx b/application/account/BackOffice/routes/login.tsx index f42a55b39..8f9bd0f3b 100644 --- a/application/account/BackOffice/routes/login.tsx +++ b/application/account/BackOffice/routes/login.tsx @@ -4,11 +4,11 @@ import { NotFoundError } from "@repo/infrastructure/auth/routeGuards"; import { Button } from "@repo/ui/components/Button"; import { Field, FieldContent, FieldDescription, FieldLabel, FieldTitle } from "@repo/ui/components/Field"; import { Link } from "@repo/ui/components/Link"; +import { Logo } from "@repo/ui/components/Logo"; import { RadioGroup, RadioGroupItem } from "@repo/ui/components/RadioGroup"; import { createFileRoute } from "@tanstack/react-router"; import { useState } from "react"; -import logoMarkUrl from "@/shared/images/logo-mark.svg"; import { HorizontalHeroLayout } from "@/shared/layouts/HorizontalHeroLayout"; const MOCK_IDENTITY_IDS = ["admin", "user"] as const; @@ -49,7 +49,7 @@ function MockLoginPage() { className="flex w-full max-w-[22rem] flex-col items-center gap-4 pt-8 pb-4" > - {t`Logo`} +

Back Office - Localhost diff --git a/application/account/BackOffice/rsbuild.config.ts b/application/account/BackOffice/rsbuild.config.ts index 1ca0fd2ba..6d4353973 100644 --- a/application/account/BackOffice/rsbuild.config.ts +++ b/application/account/BackOffice/rsbuild.config.ts @@ -1,3 +1,5 @@ +import { loadPlatformSettings } from "@repo/build/platformSettings"; +import { BrandSubstitutionPlugin } from "@repo/build/plugin/BrandSubstitutionPlugin"; import { DevelopmentServerPlugin } from "@repo/build/plugin/DevelopmentServerPlugin"; import { FileSystemRouterPlugin } from "@repo/build/plugin/FileSystemRouterPlugin"; import { LinguiPlugin } from "@repo/build/plugin/LinguiPlugin"; @@ -9,7 +11,7 @@ import { pluginSourceBuild } from "@rsbuild/plugin-source-build"; import { pluginSvgr } from "@rsbuild/plugin-svgr"; import { pluginTypeCheck } from "@rsbuild/plugin-type-check"; -const customBuildEnv: CustomBuildEnv = {}; +const customBuildEnv: CustomBuildEnv = loadPlatformSettings(); function requirePort(name: string): number { // In production builds, port env vars aren't relevant (no dev server). Returning 0 keeps the @@ -42,6 +44,14 @@ export default defineConfig({ FileSystemRouterPlugin(), RunTimeEnvironmentPlugin(customBuildEnv), LinguiPlugin(), - DevelopmentServerPlugin({ port: backOfficeStaticPort }) + DevelopmentServerPlugin({ port: backOfficeStaticPort }), + BrandSubstitutionPlugin( + { + __PRODUCT_NAME__: customBuildEnv.branding.productName, + __THEME_COLOR__: customBuildEnv.branding.themeColor.light, + __BACKGROUND_COLOR__: customBuildEnv.branding.backgroundColor + }, + ["manifest.json"] + ) ] }); diff --git a/application/account/BackOffice/shared/components/BackOfficeSideMenu.tsx b/application/account/BackOffice/shared/components/BackOfficeSideMenu.tsx index f88d4cace..4dfef1f7a 100644 --- a/application/account/BackOffice/shared/components/BackOfficeSideMenu.tsx +++ b/application/account/BackOffice/shared/components/BackOfficeSideMenu.tsx @@ -13,7 +13,7 @@ import { SidebarRail } from "@repo/ui/components/Sidebar"; import { Link as RouterLink, useRouter } from "@tanstack/react-router"; -import { Building2Icon, FlagIcon, HomeIcon, ReceiptIcon, UsersIcon, ZapIcon } from "lucide-react"; +import { BlocksIcon, Building2Icon, FlagIcon, HomeIcon, ReceiptIcon, UsersIcon, ZapIcon } from "lucide-react"; import { BackOfficeAvatarMenu } from "./BackOfficeAvatarMenu"; @@ -29,6 +29,7 @@ export function BackOfficeSideMenu() { const isBillingEventsActive = currentPath === "/billing-events" || currentPath.startsWith("/billing-events/"); const isInvoicesActive = currentPath === "/invoices" || currentPath.startsWith("/invoices/"); const isFeatureFlagsActive = currentPath === "/feature-flags" || currentPath.startsWith("/feature-flags/"); + const isComponentsActive = currentPath === "/components" || currentPath.startsWith("/components/"); return ( @@ -126,6 +127,25 @@ export function BackOfficeSideMenu() { + + + Developer + + + + + + + + + Components + + + + + + + diff --git a/application/account/BackOffice/shared/components/errorPages/AccessDeniedPage.tsx b/application/account/BackOffice/shared/components/errorPages/AccessDeniedPage.tsx index a39f7c028..7a599869d 100644 --- a/application/account/BackOffice/shared/components/errorPages/AccessDeniedPage.tsx +++ b/application/account/BackOffice/shared/components/errorPages/AccessDeniedPage.tsx @@ -1,18 +1,17 @@ import { t } from "@lingui/core/macro"; import { Trans } from "@lingui/react/macro"; +import { productName } from "@repo/infrastructure/branding"; import { Button } from "@repo/ui/components/Button"; import { Link } from "@repo/ui/components/Link"; +import { Logo } from "@repo/ui/components/Logo"; import { HomeIcon, LogOutIcon, ShieldXIcon } from "lucide-react"; -import logoMark from "@/shared/images/logo-mark.svg"; -import logoWrap from "@/shared/images/logo-wrap.svg"; - function AccessDeniedNavigation() { return (