chore: rename app from Solitaire Quest to Ferrous Solitaire
Build and Deploy / build-and-push (push) Successful in 4m55s

Replace all display-name occurrences across web pages, Rust source,
docs, and Cargo metadata. Update localStorage token key from sq_token
to fs_token. Tagline "Klondike Solitaire" retained as genre descriptor.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
funman300
2026-05-13 17:04:45 -07:00
parent 484db22208
commit e6c67d03c2
39 changed files with 56 additions and 56 deletions
+1 -1
View File
@@ -1,4 +1,4 @@
//! SVG builder for the Solitaire Quest application icon.
//! SVG builder for the Ferrous Solitaire application icon.
//!
//! Renders the project's signature `▌RS` Terminal mark (the same
//! cursor-block + monogram pair used on the splash boot-screen and
+1 -1
View File
@@ -1,4 +1,4 @@
//! Bevy integration layer for Solitaire Quest.
//! Bevy integration layer for Ferrous Solitaire.
#[cfg(target_os = "android")]
pub mod android_clipboard;
+3 -3
View File
@@ -9,7 +9,7 @@
//!
//! Slides:
//!
//! 1. **Welcome** — brief introduction to Solitaire Quest.
//! 1. **Welcome** — brief introduction to Ferrous Solitaire.
//! 2. **How to play** — drag-and-drop, double-click, and right-click hints.
//! 3. **Keyboard shortcuts** — a summary pulled from the same canonical list
//! used in `HelpScreen`. Accelerators: `Esc` anywhere in the flow skips
@@ -292,10 +292,10 @@ fn spawn_slide(commands: &mut Commands, index: u8, font_res: Option<&FontResourc
/// Slide 1 — Welcome.
fn spawn_slide_welcome(commands: &mut Commands, font_res: Option<&FontResource>) {
spawn_modal(commands, OnboardingScreen, Z_ONBOARDING, |card| {
spawn_modal_header(card, "Welcome to Solitaire Quest", font_res);
spawn_modal_header(card, "Welcome to Ferrous Solitaire", font_res);
spawn_modal_body_text(
card,
"Solitaire Quest is a free, offline-first Klondike Solitaire game. \
"Ferrous Solitaire is a free, offline-first Klondike Solitaire game. \
Play classic draw-1 or draw-3 Klondike, earn XP, unlock achievements, \
and compete on the leaderboard. Your progress is saved locally — \
optional sync to your own server keeps it in step across all your devices.",
+2 -2
View File
@@ -2343,7 +2343,7 @@ fn sync_row(
row,
SettingsButton::ConnectSync,
"Connect",
"Connect to a self-hosted Solitaire Quest sync server.".to_string(),
"Connect to a self-hosted Ferrous Solitaire sync server.".to_string(),
button_font,
);
}
@@ -2920,7 +2920,7 @@ mod tests {
.expect("Connect button should spawn with a Tooltip when backend is Local");
assert_eq!(
connect_tip.as_ref(),
"Connect to a self-hosted Solitaire Quest sync server.",
"Connect to a self-hosted Ferrous Solitaire sync server.",
"ConnectSync tooltip must use the canonical microcopy"
);
}
+3 -3
View File
@@ -2,7 +2,7 @@
//!
//! On app start the engine spawns a fullscreen, high-Z overlay that
//! reads the Terminal-style "boot screen" — an accent-coloured cursor block, the
//! "Solitaire Quest" wordmark, a short fixture boot log, a progress
//! "Ferrous Solitaire" wordmark, a short fixture boot log, a progress
//! bar, and a footer with the design-system palette swatches and the
//! build version. The overlay fades in over 300 ms, holds for ~1 s,
//! then fades out for 300 ms before despawning. The deal animation
@@ -383,7 +383,7 @@ fn spawn_header_section(parent: &mut ChildSpawnerCommands, font_handle: &Handle<
));
hdr.spawn((
SplashFadable { base_color: TEXT_PRIMARY },
Text::new("Solitaire Quest"),
Text::new("Ferrous Solitaire"),
title_font,
TextColor(transparent(TEXT_PRIMARY)),
));
@@ -1170,7 +1170,7 @@ mod tests {
"expected the cursor block (▌) on the splash, got: {texts:?}"
);
assert!(
texts.iter().any(|t| t == "Solitaire Quest"),
texts.iter().any(|t| t == "Ferrous Solitaire"),
"expected the wordmark on the splash, got: {texts:?}"
);
assert!(
+1 -1
View File
@@ -1,4 +1,4 @@
//! Backend-agnostic sync plugin for Solitaire Quest.
//! Backend-agnostic sync plugin for Ferrous Solitaire.
//!
//! On startup, the plugin spawns an async pull task on [`AsyncComputeTaskPool`]
//! that fetches the remote payload from the active [`SyncProvider`]. Once the
+1 -1
View File
@@ -84,7 +84,7 @@ mod tests {
ThemeMeta {
id: "default".into(),
name: "Default".into(),
author: "Solitaire Quest".into(),
author: "Ferrous Solitaire".into(),
version: "1.0.0".into(),
card_aspect: (2, 3),
}
+1 -1
View File
@@ -268,7 +268,7 @@ mod tests {
let meta = ThemeMeta {
id: "default".into(),
name: "Default".into(),
author: "Solitaire Quest".into(),
author: "Ferrous Solitaire".into(),
version: "1.0.0".into(),
card_aspect: (2, 3),
};
+1 -1
View File
@@ -115,7 +115,7 @@ fn default_entry() -> ThemeEntry {
meta: ThemeMeta {
id: "default".to_string(),
name: "Default".to_string(),
author: "Solitaire Quest".to_string(),
author: "Ferrous Solitaire".to_string(),
version: "1.0".to_string(),
card_aspect: (2, 3),
},
+1 -1
View File
@@ -1,6 +1,6 @@
//! Keyboard focus ring for modal buttons (Phase 1).
//!
//! Solitaire Quest's 11 modals (Help, Stats, Achievements, Settings,
//! Ferrous Solitaire's 11 modals (Help, Stats, Achievements, Settings,
//! Profile, Leaderboard, Pause, Forfeit confirm, GameOver, Confirm new
//! game, Onboarding) ship without any keyboard focus support. Phase 1
//! gives every button spawned via [`crate::ui_modal::spawn_modal_button`]