Skip to content

Rename the app to Arabesque - #224

Merged
isc merged 6 commits into
mainfrom
rename-to-arabesque
Aug 5, 2026
Merged

Rename the app to Arabesque#224
isc merged 6 commits into
mainfrom
rename-to-arabesque

Conversation

@isc

@isc isc commented Aug 4, 2026

Copy link
Copy Markdown
Owner

Applies the naming decision recorded in #222.

Renamed

  • Web — page titles on all four pages, the landing page (brand, meta
    description, hero aria-label, footer), both locale files, the favicon label,
    and the exported backup filename (arabesque-backup-*.json, with its test).
  • iOS — the target, its directory and the generated project become
    Arabesque; display name, Bluetooth and local-network usage strings follow;
    the CoreMIDI client and port names (visible to other apps) are renamed; and
    the bundle ID moves to com.arabesque.Arabesque. That identifier had to be
    settled now: it cannot be changed once the app exists on App Store Connect.
  • Around it.gitignore, the iOS CI workflow (project, target, .app
    path, launch bundle ID, crash-report glob), and both READMEs.

A changelog entry announces the rename in both languages and states that
practice data is untouched, plus an entry in CHANGELOG.

Landing hero video

Scene 5 of the hero video is a brand lockup that spelled out "Piano Trainer", so
both committed MP4s ended on the old name. Renamed in the composition and
re-rendered in both languages (the screenshots themselves carry no product name,
but the English render needed a fresh capture since the assets on disk were the
French set).

Regenerating surfaced two pre-existing breakages in the capture script, both
from the header/data-page refactor rather than this rename: it seeded through
#backup-import on the library page, which moved to the data page, and it
opened /library?accueil, a route that 404s since the library moved to
library.html. Both fixed here.

Deliberately not renamed

  • DB_NAME = 'piano-trainer' in storage.js — the IndexedDB database
    holding every user's fingerings, sessions and practice aggregates. Renaming it
    would orphan their data. The tests opening the database by name are unchanged
    for the same reason.
  • The localStorage keys (pt-*).
  • The repository name and the GitHub Pages URL, so PTWebAppURL still points at
    the live deployment.
  • The historical changelog entries mentioning the old name — they are a dated
    record of what shipped.

Verification

  • xcodegen generate produces Arabesque.xcodeproj with
    PRODUCT_BUNDLE_IDENTIFIER = com.arabesque.Arabesque.
  • Vitest: 97 passed.
  • rake test: 66 runs, 0 failures. One error on first run,
    Ferrum::PendingConnectionsError in test_hand_selection_left_hand_only — a
    page-load timeout that passes in isolation and is unrelated to this change.

🤖 Generated with Claude Code

Renames the product everywhere it is user-visible, following the decision
recorded in NAMING.md (#222): page titles and the landing page, both locale
files, the favicon label, the exported backup filename, and the READMEs.

On the iOS side the target, directory and generated project become Arabesque,
the display name and the Bluetooth/local-network usage strings follow, and the
bundle ID moves to com.arabesque.Arabesque — the identifier has to be right
before the first App Store Connect submission, since it cannot be changed
afterwards. The CoreMIDI client and port names, which other apps can see, are
renamed too. The CI workflow and .gitignore follow the new target name.

Deliberately left alone:

- DB_NAME = 'piano-trainer' in storage.js. It is the IndexedDB database holding
  every user's fingerings, sessions and practice aggregates; renaming it would
  orphan their data. The tests that open the database by name are unchanged for
  the same reason.
- The localStorage keys (pt-*).
- The repository name and the GitHub Pages URL, so PTWebAppURL still points at
  the live deployment.
- The historical changelog entries that mention the old name: they are a dated
  record of what shipped. A new entry announces the rename instead, and says
  explicitly that practice data is untouched.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
isc and others added 5 commits August 5, 2026 10:29
NAMING.md landed on main with the rename still listed as pending; this branch
is what does it.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Scene 5 of the video is a brand lockup that spelled out "Piano Trainer", so both
committed MP4s ended on the old name while the page around them said Arabesque.
Renames it in the composition and re-renders both languages.

The captured screenshots themselves carry no product name — only the lockup did
— but the English render still needed a fresh capture, since the assets on disk
were the French set.

Regenerating surfaced two pre-existing breakages in the capture script, both
dating from the header/data-page refactor rather than from the rename:

- it seeded the practice data through #backup-import on the library page, but
  that control moved to the data page (⚙️ menu) — it now imports there and waits
  on the completion alert;
- it opened /library?accueil, a route that 404s since the library moved to
  library.html.

The FR poster frame is unchanged because it is taken from the opening library
scene, which this touches not at all.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The French render reused the screenshots left on disk from June, while the
English one was captured fresh — the two hero videos showed different states of
the app. Both are now captured from the same app and the same backup.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The practice journal is rendered relative to now, so seeding a three-week-old
backup opened the hero video on a column of "Aucune pratique" — the one panel
that was supposed to show a living repertoire.

The page's clock is now pinned just after the most recent session in the backup,
which puts that session under "today" and keeps the days above it filled. The
date is derived from the file rather than hardcoded, so any backup produces a
journal that looks current. Playwright's setFixedTime only pins Date.now() and
new Date(): timers keep running, so animations, the OSMD render and the
mock-MIDI sleeps are unaffected.

Also seeds both spellings of the language key, since the next branch renames it
and this script has to work either side of that change.

Both languages recaptured and re-rendered.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@isc
isc merged commit 37e6a02 into main Aug 5, 2026
2 of 3 checks passed
@isc
isc deleted the rename-to-arabesque branch August 5, 2026 09:40
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.

1 participant