Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
56 commits
Select commit Hold shift + click to select a range
5abb7bc
Make CLI alias-name handling generic so downstream renames need no so…
tjementum May 16, 2026
7374a3d
Extract Docker volume prefix into DockerVolumePrefix const for downst…
tjementum May 16, 2026
5e3dcaa
Move platform-settings.jsonc to application root for visibility
tjementum May 16, 2026
0ebe358
Rename DockerVolumePrefix constant to camelCase to satisfy local-cons…
tjementum May 16, 2026
42ea601
Expose platform-settings branding and social links to the frontend build
tjementum May 16, 2026
ffae799
Wire SPA branding strings to platform-settings
tjementum May 16, 2026
8deec6d
Wire backend API titles to platform-settings product name
tjementum May 16, 2026
fa1b343
Wire transactional email templates and components to platform-setting…
tjementum May 16, 2026
73c2681
Wire PWA manifests and HTML title to platform-settings product name
tjementum May 16, 2026
49fc681
Centralize Bicep deployment branding via PRODUCT_NAME env var
tjementum May 16, 2026
6c1dd8e
Remove accidentally-committed bicep build artifact and gitignore modu…
tjementum May 16, 2026
b919312
Make social links optional, add X/Facebook/Instagram, and split conta…
tjementum May 16, 2026
e0c956f
Make remaining surfaces config-aware and fail loud on missing PRODUCT…
tjementum May 16, 2026
624a20c
Replace cryptic 1208/add-pre-push-hook examples with clearer fix-logi…
tjementum May 16, 2026
7a9d270
Make E2E tests config-aware by reading product name from platform-set…
tjementum May 16, 2026
296c60f
Add tagline to platform-settings and wire it to landing footer, email…
tjementum May 16, 2026
56ed1af
Centralize brand logos to shared-webapp/ui/images and dedupe per-app …
tjementum May 16, 2026
1551659
Add dedicated PlatformPlatform credit logos so downstream rebrands ke…
tjementum May 16, 2026
b59e5a5
Replace brand SVG logos with PNG so Safari renders them crisply
tjementum May 16, 2026
bcdba06
Rename brand assets to include variant and size suffix (logo-mark-lig…
tjementum May 16, 2026
3fcd6f0
Remove orphaned PlatformPlatform.* coverage filter from solution sett…
tjementum May 16, 2026
0076a05
Rename logo-wrap assets to logo and update consumer imports
tjementum May 16, 2026
6c34b00
Add dark-mode apple-touch-icon variant for iOS 13+
tjementum May 16, 2026
b365030
Replace platformplatform.net with example.com in illustrative comments
tjementum May 16, 2026
5ceb4a6
Clarify internalEmailDomain classifies users for telemetry not BackOf…
tjementum May 16, 2026
58e1626
Add rebrand skill for downstream forks of PlatformPlatform
tjementum May 16, 2026
a8bf333
Size public logo by height so any aspect ratio renders undistorted
tjementum May 16, 2026
99e70ef
Add theme-aware Logo component and migrate brand-asset consumers
tjementum May 16, 2026
4c448c3
Make email header a full-width responsive banner
tjementum May 16, 2026
30d4339
Derive Add to Home Screen prompt brand name from configuration
tjementum May 17, 2026
606d783
Derive delete-account support email from configuration
tjementum May 17, 2026
041154b
Derive developer CLI messages from the alias name
tjementum May 17, 2026
1adb860
Source the deployment product name from platform-settings
tjementum May 17, 2026
afd6a1d
Let wordmark logo size to its natural width on error and suspended pages
tjementum May 17, 2026
a687a16
Remove PlatformPlatform attribution from login and verification footer
tjementum May 17, 2026
70b1636
Use compliance loanword over overholdelse in Danish translations
tjementum May 17, 2026
ab464c7
Centralize hero images in shared-webapp/ui/images
tjementum May 17, 2026
5b61ed6
Centralize brand primary color via platform-settings
tjementum May 17, 2026
9db1b76
Prefix Back Office title with product name
tjementum May 17, 2026
1852f10
Centralize PWA theme and background colors via platform-settings
tjementum May 17, 2026
3d33075
Centralize email header background color via platform-settings
tjementum May 17, 2026
623939b
Track platform-settings.jsonc as global dependency in turbo
tjementum May 17, 2026
c21a55a
Remove region selector from signup form
tjementum May 17, 2026
034612a
Fix Danish translation errors and remove en-US Zoom test artifact
tjementum May 18, 2026
06f499b
Preserve aspect ratio for non-square brand marks in Logo component
tjementum May 18, 2026
44086bc
Constrain landing and legal pages to 1024px with edge-aligned navigation
tjementum May 18, 2026
09233cf
Add showAddToHomescreen branding flag to gate the install prompt
tjementum May 18, 2026
ded6b0b
Prevent logo from shrinking in narrow navigation headers
tjementum May 18, 2026
7fdcff9
Remove gap between locale and theme controls so the nav fits narrow s…
tjementum May 18, 2026
8b1f907
Make email preview render real brand values instead of stale samples
tjementum May 18, 2026
9dd52d0
Move component showcase to back-office and host-gate email preview ar…
tjementum May 18, 2026
88f64db
Remove email card corner radius on mobile devices
tjementum May 18, 2026
6b2565a
Centralize Docker volume prefix between AppHost and developer CLI
tjementum May 18, 2026
a695a3c
Restructure landing page footer layout and copyright text
tjementum May 18, 2026
42e138f
Reorganize local development port allocation around browser-facing hosts
tjementum May 18, 2026
e84038d
Stop staging deploy jobs from skipping when the database migration jo…
tjementum May 18, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .claude/rules/frontend/emails.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ Guidelines for authoring transactional email templates that ship as Scriban-subs
- `<OtpAutofill code="otpCode" domain="domain" />` 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.** `<Value>` renders a `<span>`, so it cannot live inside attributes like `href` or inside the literal text of a `<Trans>` marker. In those two cases, hand-write the Scriban placeholder verbatim:
- Attribute: `<Link href="{{LoginUrl}}">…</Link>` (the entire attribute value is a single placeholder)
- Trans string: `<Trans>{`You have been invited to join '{{'TenantName'}}' on PlatformPlatform`}</Trans>` — 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: `<Trans>{`You have been invited to join '{{'TenantName'}}' on '{{'ProductName'}}'`}</Trans>` — 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
Expand Down Expand Up @@ -68,9 +68,9 @@ import { Value } from "@repo/emails/helpers/Value";

export default function Welcome({ locale }: { locale: string }) {
return (
<TransactionalEmail locale={locale} preview="Welcome to PlatformPlatform">
<TransactionalEmail locale={locale} preview="Welcome to {{ProductName}}">
<Subject>
<Trans>Welcome to PlatformPlatform</Trans>
<Trans>{`Welcome to '{{'ProductName'}}'`}</Trans>
</Subject>
<Heading level={1}>
<Trans>Hi <Value path="user.firstName" sample="Alex" /></Trans>
Expand Down
2 changes: 1 addition & 1 deletion .claude/rules/frontend/translations.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ import { Heading } from "@repo/ui/components/Heading";
</Button>

<Heading>
<Trans>Welcome to PlatformPlatform</Trans>
<Trans>Welcome to {productName}</Trans>
</Heading>
<Trans>Dynamic content: {dynamicContent}</Trans> // ✅ DO: Translate parameterized dynamic content
<Trans>{dynamicContent}</Trans> // ❌ DON'T: Do not translate completely dynamic content
Expand Down
2 changes: 1 addition & 1 deletion .claude/skills/aspire-stop/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 <basePort>` - 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.
Expand Down
18 changes: 9 additions & 9 deletions .claude/skills/create-pull-request/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.

Expand Down Expand Up @@ -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.

Expand All @@ -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/<owner>/<repo>/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
```
4 changes: 2 additions & 2 deletions .claude/skills/db-query/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.**

Expand All @@ -24,7 +24,7 @@ If `psql --version` fails, tell the user:

Aspire must be running.

- Host `localhost`, port = `<base> + 2` where `<base>` is the integer in `.workspace/port.txt`.
- Host `localhost`, port = `<base> + 4` where `<base>` 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).

Expand Down
Loading
Loading