Skip to content

chore(brand+demo): lowercase "anonmesh" + dev/demo affordances out of bundle#38

Merged
epicexcelsior merged 4 commits into
anonmesh:v3from
epicexcelsior:epic/tutorial-replay-lowercase
May 10, 2026
Merged

chore(brand+demo): lowercase "anonmesh" + dev/demo affordances out of bundle#38
epicexcelsior merged 4 commits into
anonmesh:v3from
epicexcelsior:epic/tutorial-replay-lowercase

Conversation

@epicexcelsior
Copy link
Copy Markdown
Collaborator

@epicexcelsior epicexcelsior commented May 8, 2026

Summary

Aligns the app with the team rule that demo/dev affordances must not ship in the production bundle. Bundles three concerns:

  1. Lowercase brand strings — all 8 user-visible AnonMeshanonmesh. Solana Pay label (visible in Phantom/Solflare prefill) included.
  2. Tutorial replay toolingnpm run replay:tutorial:{android,ios} deep-links the /tutorial route. No in-app surface, no flag in app code.
  3. DEMO_MODE removedEXPO_PUBLIC_DEMO_MODE was env-driven and could leak into release APKs. Replaced with deep-link + npm script (demo:prefill-send:{android,ios}) using anonmesh://send/recipient?to=<addr>.

Why

  • EXPO_PUBLIC_DEMO_MODE could flip on for any build (including a release APK handed to a judge). Even {DEMO_MODE && ...} ships as inert dead code in the bundle.
  • npm scripts are tooling, not bundle — zero leak surface, fully shareable across the team.
  • Brand casing was inconsistent with the lowercase URL scheme + Android package id (anonmesh, magicred1.anonmesh.app).

Files

Brand rename (PR #28 carryover):

  • app/tutorial.tsx — slide title, header fallback, final CTA
  • app/receive.tsx + src/services/solanaPayUri.ts — Solana Pay defaults
  • components/nodes/MeshMap.tsx — empty-state copy
  • src/utils/blePermissions.ts — internal comment

Tutorial polish:

  • app/tutorial.tsx — slide icons swapped to Feather standards: identity-chipuser, signalradio (matches statLabel: "Radio"). Slide 3 send already Feather. Cleaner glyphs at 42px.

DEMO_MODE removal:

  • Deleted src/utils/demoMode.ts
  • components/send/RecipientPicker.tsx — recipient now reads from ?to= query param via useLocalSearchParams. Demo fill button + orphan styles dropped. Stale "or use the devnet fill" hint in QR-soon alert tightened.
  • components/send/ReviewCard.tsx — "Demo mode: devnet SOL only." banner + orphan styles dropped.

Tooling:

  • package.jsonreplay:tutorial:{android,ios} + demo:prefill-send:{android,ios}. All four wrap deep links; no app-code conditionals.

Backward compatibility

  • /send/recipient with no params behaves identically to DEMO_MODE-off (empty address field). Tab navigation and in-app router.push("/send/recipient") callsites unchanged.
  • /send/recipient?to=<addr> is the new prefill path (deep link only). Replaces the previous DEMO_MODE-on prefill 1:1, same address.

Test plan

On any installed dev/release build:

  • npm run replay:tutorial:android → tutorial mounts; slide 1 user icon + lowercase brand; slide 2 radio icon (concentric arcs); slide 3 Open anonmesh CTA.
  • npm run demo:prefill-send:android → send recipient screen opens prefilled with the demo devnet address; Continue is enabled.
  • Tab nav into Send → recipient field starts empty (no regression).
  • Receive → scan QR with Phantom on a separate phone → prefilled label reads anonmesh.

Out of scope

  • Pre-existing H_PAD TS error in PendingCosigns.tsx on v3 — already fixed on epic/send-qr-scan via d247729.

…ipts

Lowercases all user-visible AnonMesh -> anonmesh (8 strings):
- tutorial slide title, header fallback, final CTA
- receive.tsx + solanaPayUri.ts Solana Pay label/message defaults
- MeshMap empty-state copy
- blePermissions internal comment

Adds two npm scripts that deep-link the tutorial route:
- replay:tutorial:android (adb am start)
- replay:tutorial:ios (xcrun simctl openurl)

Lets any teammate replay the first-run tour on a running device
without pm clear or rebuilding. No app-code changes.
Slide 1 (identity): identity-chip -> user
Slide 2 (evidence/radio): signal -> radio (matches statLabel "Radio")

Drops two custom SVGs in favor of Feather glyphs that read cleaner
at the 42px tutorial size and align with icon style used elsewhere
in Settings. Slide 3 (send) already used Feather.
@epicexcelsior epicexcelsior changed the title chore(brand): lowercase "anonmesh" in user copy + tutorial replay scripts chore(brand): lowercase "anonmesh" + tutorial replay scripts + icon polish May 8, 2026
@epicexcelsior epicexcelsior marked this pull request as draft May 8, 2026 10:37
…link

Demo affordances must not ship in the production bundle even as inert
dead code. EXPO_PUBLIC_DEMO_MODE was env-driven and could be flipped on
for any release build, leaking demo-time behavior to anyone holding
that APK.

- Remove src/utils/demoMode.ts (DEMO_MODE + DEMO_RECIPIENT_ADDRESS)
- RecipientPicker: read recipient from ?to= query param via
  useLocalSearchParams; drop hardcoded prefill, demo fill button,
  and orphan styles; tighten QR-soon alert copy
- ReviewCard: drop "Demo mode: devnet SOL only" banner + orphan styles
- Add demo:prefill-send:{android,ios} npm scripts wrapping the
  anonmesh://send/recipient?to=<addr> deep link with the same demo
  address as the previous flag

No regression on tab navigation: /send/recipient with no params still
opens to an empty address field (identical to DEMO_MODE-off behavior).
@epicexcelsior epicexcelsior changed the title chore(brand): lowercase "anonmesh" + tutorial replay scripts + icon polish chore(brand+demo): lowercase "anonmesh" + dev/demo affordances out of bundle May 8, 2026
@epicexcelsior epicexcelsior marked this pull request as ready for review May 8, 2026 10:42
@epicexcelsior epicexcelsior requested a review from Copilot May 8, 2026 10:42
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR aligns production builds with the rule that demo/dev affordances should not ship in the production bundle, while also standardizing user-visible brand casing to lowercase.

Changes:

  • Removes env-driven DEMO_MODE code paths (and the demoMode utility), replacing demo/tutorial entry points with deep-link-based npm scripts.
  • Updates Solana Pay defaults and multiple UI strings from AnonMeshanonmesh.
  • Polishes the tutorial slide icons to use Feather-standard glyphs.

Reviewed changes

Copilot reviewed 9 out of 9 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
mobile_app/src/utils/demoMode.ts Removes env-driven demo flags/constants from the bundle.
mobile_app/src/utils/blePermissions.ts Updates internal comment brand casing to lowercase.
mobile_app/src/services/solanaPayUri.ts Updates Solana Pay default label/message strings to lowercase brand.
mobile_app/package.json Adds deep-link helper scripts for tutorial replay and send-recipient prefill.
mobile_app/components/send/ReviewCard.tsx Removes demo-mode banner and related styles.
mobile_app/components/send/RecipientPicker.tsx Removes demo-mode fill UI and adds query-param-based recipient prefill.
mobile_app/components/nodes/MeshMap.tsx Updates empty-state copy to lowercase brand.
mobile_app/app/tutorial.tsx Updates brand casing and swaps tutorial slide icons to Feather names.
mobile_app/app/receive.tsx Updates Solana Pay QR label/message to lowercase brand.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines 88 to 93
export function RecipientPicker() {
const router = useRouter();
const { colors } = useTheme();
const [address, setAddress] = useState(DEMO_MODE ? DEMO_RECIPIENT_ADDRESS : "");
const params = useLocalSearchParams<{ to?: string }>();
const [address, setAddress] = useState(typeof params.to === "string" ? params.to : "");
const [selectedSymbol, setSelectedSymbol] = useState<string>("SOL");
…lowercase

# Conflicts:
#	mobile_app/components/send/RecipientPicker.tsx
@epicexcelsior epicexcelsior merged commit 5257231 into anonmesh:v3 May 10, 2026
@epicexcelsior epicexcelsior deleted the epic/tutorial-replay-lowercase branch May 15, 2026 09:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants