Repository navigation
Conversation
A workspace chooses what visitors call what they post (Idea, Post, Feature request or Suggestion) and what groups them (Board or Category), and the portal, the widget and the unsubscribe page say it in every language. - Brand > Words in Appearance: a tile per choice with a sentence the portal would say. The preview shows it before publishing, Home's block names follow it, and the menu labels and English headlines that still name the old word are offered for rewording in the same draft. - 112 visitor strings select on postWord and boardWord, with idea and board as each select's other branch; 30 that use the words another way stay. PortalWordsIntl passes the words into every message, so no call site changes: the portal, unsubscribe and widget set the published words, the preview the draft's, and the admin and onboarding keep post and board. Each nested provider applies them again. - All 12 other catalogues word every choice, each language with one noun per choice anchored on its translator's terms. - A guard fails an English visitor string that names a post or board without the select, and any catalogue whose choices fail to format, read alike, or miss the default. The placeholder parity check now parses messages, since a select branch's first word is not a placeholder. - The Boards settings say what visitors see where it differs from the admin's words. The English of each converted string, every choice included, lives in the code, so the post page's script ceilings take their new readings.
A notification row is stored in the admin's words, a post and a board, and the bell words it again in the reader's: the portal's own word there. The parity check now formats as the admin does.
The portal now says idea by default: the composer's field is Idea title, the empty filter state says No ideas match your filters, and a new post's toast says Idea submitted.
mortondev
force-pushed
the
feat/portal-design-v2-phase4-words
branch
from
October 31, 2026 05:22
83f871b to
e234b5f
Compare
Member
Author
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The seventeenth of the stack that builds a new design engine for the portal, and the fifth of phase 4. A workspace chooses what visitors call what they post (Idea, Post, Feature request or Suggestion) and what groups them (Board or Category), and the portal, the widget and the unsubscribe page say it, in every language. Behind the
portalDesignV2flag; with it off, the portal says idea and board.Brand › Words
Two rows of tiles in Appearance, each tile with a sentence the portal would say: "What's your suggestion?", "All categories". The preview shows the choice before it is published, Home's blocks take its name in Sections ("Top suggestions"), and Review and publish names the change.
After a change, Appearance finds the menu labels and English headlines that still name the old word, such as a Feedback tab labelled "Ideas", and offers to update them in the same draft ("Update them" or "Keep them"). It keeps each one's capitals and puts a or an before the new noun.
How messages take the words
postWordandboardWord. For example{postWord, select, post {What's on your mind?} feature_request {What should we build?} suggestion {What's your suggestion?} other {What's your idea?}}. The default words, idea and board, are each select'sother, so a missing word always reads as the default.PortalWordsIntl(inuse-intl-setup.ts, which every page already loads) re-provides the intl above it with the words merged into every message's values, a call's own values first. The portal layout, the unsubscribe page and the widget set the published words; the preview listener sets the draft's; the admin and onboarding set post and board, so a portal string shown in the admin keeps the admin's words. Every provider nested below one of these applies the words again.usePortalWords()reads them anywhere.Translation
All 12 other catalogues have every choice. Each language first fixed one noun per choice, anchored on the terms its translator already uses (Polish keeps "zgłoszenie"-style wording; Spanish and French keep "categoría" and "catégorie" for board, so category is "sección" and "rubrique"). Then the strings were drafted with the workspace's translation model and checked: each parses, keeps its placeholders, and has every branch. I read samples in each language.
Guards
locales/__tests__/portal-words.test.ts: any English visitor string that names an idea, a post or a board without the select fails, unless it is one of the 30 kept with reasons. In every catalogue, each word message formats every choice without error, the four post choices read differently, so do the two board choices, and an unknown word reads as the default.locale-parity.test.ts) read a select branch's first word as a placeholder; it now parses each message.Also
The end-to-end tests and the perf journeys find the portal in its default word: Idea title, No ideas match your filters, Idea submitted.
The notification parity check formats as the admin does: a stored notification row says a post, and the portal's bell words it in the portal's word.
The Boards settings page says what visitors see where it differs from the admin's words: "Visitors see suggestions and categories".
Performance
The English for each converted string, every choice included, is in the code, where English pages read it. Dropping each select's explicit idea and board branches, which
otheralready says, cut that by a fifth. The full bench then held every request count; only the post page and the three journeys that open one went over their script ceilings, by about 0.5 KB, and take their readings (459.6 and 68.8 KB). The words themselves live inuse-intl-setup.ts, which every page already loads, so no new chunk appears.Verification