Closer/docs/NameChange.md

9.5 KiB
Raw Blame History

App rename: "Closer" → "Closer Couples"

Audit + decision record for renaming the product's public name to "Closer Couples". Status: executed in repo. Store-console changes remain external owner steps.

2026-07-09 extension — in-app prose now renamed. The original pass was store/marketing only (in-app copy deliberately stayed "Closer"). Owner decision to extend: in-app prose copy now uses "Closer Couples" across Android + iOS (settings, pairing, invite share, widget headlines, paywall subhead/thank-you, age gate, privacy body, iOS settings/onboarding/pairing). The launcher label and wordmark logos still stay "Closer" (owner kept these — truncation under the icon, and the logo is a brand mark). See "What still stays 'Closer'" below. No technical identifiers touched; Android compiles + unit tests green (TodayWidgetTest assertions updated).

Context

After auditing every occurrence of the name across Android, iOS, images, and docs, the chosen approach is a deliberate two-tier branding outcome:

  • Store & marketing name = "Closer Couples"
  • Installed-app name (home-screen launcher label + every in-app string) stays "Closer" — it fits under the icon ("Closer Couples" at 14 chars truncates to "Closer Coupl…") and avoids a full in-app rewrite.

Most important consequence: no code changes, no rebuild, no app re-release. And critically — the only thing users actually see change (the store listing title + the feature graphic) is set in the Google Play / App Store console, which is an EXTERNAL step performed by the owner. Editing this repo does not rename anything that is live; the repo work is (a) the source-of-truth feature-graphic asset, (b) doc/record housekeeping. The wordless C-heart-keyhole icon/logo is unaffected (icon SVG sources contain zero <text>).

Technical identifiers that must NOT change

Renaming any of these breaks builds / Firebase / the Play listing: namespace app.closer · applicationId closer.app · package app.closer.* + class CloserApp · deep-link host closer.app + closer:// scheme · Firebase closer-app-22014 (google-services.json, GoogleService-Info.plist) · iOS PRODUCT_BUNDLE_IDENTIFIER app.closer.iphone + bundleIdPrefix app.closer + product/target/scheme Closer · SPM package Closer · Gradle rootProject.name "Closer" · resource filenames (closer_launcher_*, ic_notification_closer, ic_launcher*) · XML styles Theme.Closer[.Splash] · entitlement id closer_premium · crypto AAD constants.

What still stays "Closer" (after the 2026-07-09 prose extension)

  • Android launcher labelapp/src/main/res/values/strings.xmlapp_name stays "Closer" (14-char "Closer Couples" truncates under the icon).
  • iOS home-screen labeliphone/Closer/Info.plistCFBundleDisplayName stays "Closer" (CFBundleName/PRODUCT_NAME untouched).
  • Wordmark logos (onboarding OnboardingScreen/iOS OnboardingViews, auth alt-text AuthVisuals, TodayWidget header, WeeklyRecapShareCard drawText) stay "Closer" → the logo is a brand mark; their asserting tests (FirstRunRenderSmokeTest contentDescription, recap/widget tests) stay green.
  • Deliberate copy exceptions that stay "Closer": the "Grow Closer" onboarding headline (intimacy pun, not the app name); the privacy-rotator slogan "…so Closer cannot read them" and iOS "not even Closer's servers" (entity references; the rotator line also has a hard 64-char display cap that "Closer Couples" would exceed — CloserBrandCopyTest); the iOS "Settings > Closer" help path (must match the kept CFBundleDisplayName); and the "Closer Premium" tier label (matches the RevenueCat entitlement display name).
  • Internal engineering/brand-system docs using "Closer" as codename/design-system name (DEVELOPMENT_LOG.md, SECURITY.md, Future.md, Engineering_Reference_Manual, Claude*.md, brand-system docs).

In-app prose renamed to "Closer Couples" (2026-07-09)

The ~26 user-facing strings where "Closer" names the app in a sentence now read "Closer Couples":

  • Android (9 files): CloserCopy (paywall subhead reworded to avoid "Couples…couples", thank-you, age-gate ×3), InviteShareText, PairPromptScreen, SettingsScreen (appearance + delete-account subtitles), TodayWidget (Open / "Something's waiting" headlines — header wordmark kept), MainActivity biometric prompt, WeeklyRecapShareCard caption (drawText wordmark kept), strings.xml (privacy_no_export_body, privacy_rule_intro). TodayWidgetTest exact-match assertions updated.
  • iOS (2 files): SettingsViews (profile/account/data-export/legal/help/premium-eligibility/paywall subhead), PairingViews explore line.
  • Internal engineering/brand-system docs using "Closer" as codename/design-system name (DEVELOPMENT_LOG.md, SECURITY.md, Future.md, Engineering_Reference_Manual, the Claude*.md reports, docs/brand/asset-system.md "Closer Artwork Asset System", docs/brand/generated-art/glyphs/README.md "Closer G-set").

Changes to make (in-repo)

1. Store feature graphic (the one required image) — docs/store/

The exhaustive wordmark-SVG list is exactly three files; only this one is store-facing (the other two are unreferenced internal art — see §5).

  • Completed: docs/store/sources/feature-graphic.svg now uses Closer Couples at font-size="58", with centered card icons/headlines/sublabels and privacy-forward copy: private questions, encrypted answers, mutual reveals, no public feed.
  • Completed: docs/store/feature-graphic-1024x500.png was re-exported from the SVG (1024×500, no alpha) — see re-export procedure.

2. Store-listing doc — docs/release/store-assets.md

  • Completed: title, app-name checklist, full-description prose, and §9 inventory now use "Closer Couples" while documenting that the launcher label remains "Closer".

3. README.md — product-name references only

Completed: <h1>, feature-graphic alt text, and product-facing prose use "Closer Couples". Codename/dir/scheme mentions (iphone/Closer, Closer.xcodeproj, -scheme Closer) remain unchanged.

4. docs/brand/visual-identity.md — product-name prose (consistency, optional)

Completed: product-name prose uses "Closer Couples"; asset paths stay unchanged.

5. Retired internal generated-art feature graphics

Removed the two unreferenced banner-like generated-art files so there is a single source of truth for README/store banner work: docs/store/sources/feature-graphic.svg -> docs/store/feature-graphic-1024x500.png.

Feature-graphic re-export procedure (the installed tooling can't do it naively)

rsvg-convert / inkscape / resvg are not installed, and ImageMagick's SVG delegate is wired to the missing rsvg-convert, so a bare convert file.svg file.png falls back to ImageMagick's native renderer and will mangle this SVG's feDropShadow filters, gradients, and embedded <image>. Use the rasterizer that IS present:

  • Headless Chrome (google-chrome is installed) — pixel-accurate; DejaVu Sans Bold is installed, so text renders correctly.

  • The SVG's <image href="../../brand/sources/…png"> is relative to docs/store/sources/, so serving the repo root and loading the SVG over http:// resolves the embedded icon correctly:

    python3 -m http.server 8099 &   # or: npx http-server -p 8099  (node is available)
    google-chrome --headless --disable-gpu --hide-scrollbars \
      --window-size=1024,500 --screenshot=/tmp/fg.png \
      "http://localhost:8099/docs/store/sources/feature-graphic.svg"
    
  • Flatten alpha (Play requires no alpha; Chrome screenshots carry an alpha channel — the opaque #24122F rect covers it visually but the channel persists):

    convert /tmp/fg.png -background '#24122F' -flatten -alpha off docs/store/feature-graphic-1024x500.png
    
  • Fallback if headless Chrome misbehaves (sandbox/sizing): the corrected .svg is the source of truth — commit it and re-export the PNG with proper design tooling before uploading to Play Console. Per store-assets.md:200, never hand-edit the raster; always regenerate from the SVG.

External steps (owner performs — outside the repo; this is what actually renames the app)

  • Google Play Console → store listing → App name = "Closer Couples", paste the updated description, upload the re-exported feature graphic.
  • App Store Connect (when iOS ships) → app name "Closer Couples".
  • Heads-up: (a) Play title policy allows a descriptor addition — "Closer" → "Closer Couples" is a clear same-brand superset, low risk, but a launcher label that differs from the store title is worth a sanity check at review; (b) store-assets.md:14's trademark check should be re-run against the new name.

Verification

  • Re-exported feature-graphic-1024x500.png: visibly reads "Closer Couples", legible, no clipping/overlap with the icon or the three cards; confirm 1024×500 and no alpha (identify -verbose … | grep -iE 'Geometry|Alpha|Type').
  • Grep the touched docs for leftover standalone "Closer" that should be "Closer Couples" (excluding codename/dir/scheme + technical URLs).
  • Launcher untouched: app_name in strings.xml and CFBundleDisplayName in Info.plist both still "Closer".
  • No build required (no source touched); optional ./gradlew :app:assembleDebug still succeeds unchanged.

Pre-existing issue noted (NOT fixed here)

store-assets.md:106 — support URL couplesconnect.app vs the closer.app domain used elsewhere; unrelated to this rename, leave for separate cleanup.