feat(client): per-locale PWA manifest (name, short_name, description) #226
Labels
No labels
area:auth
area:ci
area:db
area:infra
area:native
area:pwa
area:service
epic
feature
foundation
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
james/carol#226
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Context
#208 (PR #223) shipped
apps/client/public/manifest.webmanifestwithname,short_name, anddescriptionhardcoded in English. Carol's user-facing copy convention (CLAUDE.md→ "No hardcoded user-facing strings") makes an exception here because the manifest is static and the install prompt fires before the bundle resolves a locale.That's fine while Carol ships in
en+ a partialescatalog. Once a third locale lands — or theescatalog reaches full coverage and a user installing from Spanish-default Chrome gets the English install prompt — it'll feel off.Source
Follow-up flagged in #223.
Scope
public/manifest.webmanifestto a per-locale build artifact. Options:packages/i18n/messages/<locale>.jsonand emitsmanifest.<locale>.webmanifest; the+html.tsxinjection picks the right<link rel="manifest" href="…">based on the resolved locale.lang+ content-negotiation pattern — simpler but supported unevenly across browsers.name,short_name,descriptionentries to each locale catalog under amanifest.*key.pnpm -F @carol/client export:web(or apre:export:webscript) to emit one manifest per locale inSUPPORTED_LOCALES.apps/api/app/[...spa]/route.tsif necessary so each locale's manifest URL resolves; alternatively the locale prefix is already part of the SPA path and the existing serving handles it.Acceptance criteria
pnpm -F @carol/client export:webproduces one manifest perSUPPORTED_LOCALESentry.packages/i18n/messages/{en,es}.jsoncarrymanifest.{name,shortName,description}keys.Out of scope
theme_coloror icon URLs per locale.lang+ content-negotiation backend pipeline.SUPPORTED_LOCALES.Composes with
Part of
#176