Rebrand to mtgc: pirate-ship logo, lowercase app name, mtgc binary

- New logomark: an original pirate-ship silhouette (hull, twin billowing
  sails, swallow-tail pennant) in the terracotta brand gradient on a dark
  square — a nod to the MTG card "Pirate Ship", not a reproduction of its
  art. Source at src-tauri/icons/logo-source.svg; regenerate the full
  platform icon set (desktop/Windows Store/iOS/Android) with
  `cargo tauri icon src-tauri/icons/logo-source.svg`.
- Apply it in-app via a new inline ShipLogo component (App.tsx), replacing
  the old "M" sidebar mark and "✦" empty-state mark with dark rounded
  squares containing the ship glyph.
- Rename the app to lowercase "mtgc" everywhere: window title and
  productName (tauri.conf.json), <title> (index.html), sidebar brand text,
  empty-state heading.
- Rename the Tauri package/binary mtgc-app -> mtgc (and its lib crate
  mtgc_app_lib -> mtgc_lib), so `cargo tauri build` now produces
  target/release/mtgc; updated main.rs and every README reference.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-07 21:53:36 -05:00
parent 67c97bbd7a
commit d8a9787ecd
59 changed files with 96 additions and 25 deletions

2
Cargo.lock generated
View File

@@ -1816,7 +1816,7 @@ dependencies = [
]
[[package]]
name = "mtgc-app"
name = "mtgc"
version = "0.1.0"
dependencies = [
"mtgc-core",

View File

@@ -66,7 +66,7 @@ cargo tauri build
Outputs (under the workspace `target/release/`):
- **`target/release/mtgc-app`** — the standalone executable. The web UI and all
- **`target/release/mtgc`** — the standalone executable. The web UI and all
app logic are baked into this one file. It dynamically links the system WebKit/GTK
libraries (`webkit2gtk4.1`, `gtk3`), so those must be present on the machine that
runs it — they are on any modern desktop Linux and are installed by
@@ -77,12 +77,12 @@ Outputs (under the workspace `target/release/`):
Useful variants:
```bash
cargo tauri build --no-bundle # only the bare target/release/mtgc-app binary
cargo tauri build --no-bundle # only the bare target/release/mtgc binary
```
Notes:
- The `mtgc-app` binary is a single file but relies on the system WebKit/GTK libs
- The `mtgc` binary is a single file but relies on the system WebKit/GTK libs
being present (installed by `devel-setup.sh`).
- The binary does **not** embed card data — first run still downloads the Scryfall
bulk into the OS app-data dir, and your synced `library.db` lives there by default
@@ -115,3 +115,14 @@ cargo build # build everything incl. the desktop app
The core and frontend are platform-agnostic; `cargo tauri icon` already emitted
iOS/Android icon sets. Porting is adding `tauri ios` / `tauri android` targets —
only reference-data provisioning differs (download on-device).
## Branding
The logo is an original pirate-ship silhouette in the terracotta brand color
(`#C8553D`) — a nod to the MTG card "Pirate Ship", not a reproduction of its
art. Source: `src-tauri/icons/logo-source.svg`. To regenerate the full
platform icon set after editing it:
```bash
cargo tauri icon src-tauri/icons/logo-source.svg
```

View File

@@ -3,7 +3,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>MTG Library Catalog</title>
<title>mtgc</title>
</head>
<body>
<div id="root"></div>

View File

@@ -1,13 +1,13 @@
[package]
name = "mtgc-app"
name = "mtgc"
version = "0.1.0"
edition = "2021"
description = "MTG Library Catalog desktop app"
description = "mtgc — personal Magic: The Gathering library catalog"
[lib]
# The Tauri app logic lives in a lib so the same entry point can serve desktop
# and (later) mobile targets.
name = "mtgc_app_lib"
name = "mtgc_lib"
crate-type = ["staticlib", "cdylib", "rlib"]
[build-dependencies]

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.3 KiB

After

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.8 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

After

Width:  |  Height:  |  Size: 9.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.6 KiB

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.0 KiB

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.0 KiB

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.0 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.9 KiB

After

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.3 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

After

Width:  |  Height:  |  Size: 8.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.9 KiB

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.9 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 730 B

After

Width:  |  Height:  |  Size: 916 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 473 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.0 KiB

After

Width:  |  Height:  |  Size: 11 KiB

View File

@@ -0,0 +1,35 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 200">
<defs>
<linearGradient id="bg" x1="0" y1="0" x2="1" y2="1">
<stop offset="0" stop-color="#22242b"/>
<stop offset="1" stop-color="#15161a"/>
</linearGradient>
<linearGradient id="ship" x1="0" y1="0" x2="0" y2="1">
<stop offset="0" stop-color="#d86e56"/>
<stop offset="1" stop-color="#a8412d"/>
</linearGradient>
</defs>
<rect x="0" y="0" width="200" height="200" fill="url(#bg)"/>
<!-- waterline waves -->
<path d="M8,161 Q26,153 44,161 T80,161 T116,161 T152,161 T188,161" fill="none" stroke="#3a8fd0" stroke-width="5" stroke-linecap="round" opacity="0.55"/>
<path d="M2,175 Q21,166 40,175 T78,175 T116,175 T154,175 T192,175" fill="none" stroke="#3a8fd0" stroke-width="5" stroke-linecap="round" opacity="0.3"/>
<!-- hull -->
<path d="M21,137 L179,137 L159,176 Q100,193 41,176 Z" fill="url(#ship)"/>
<!-- deck rail highlight -->
<rect x="21" y="133" width="158" height="6" rx="3" fill="url(#ship)"/>
<!-- mast -->
<rect x="95" y="7" width="10" height="127" fill="url(#ship)"/>
<!-- foresail (smaller, forward) -->
<path d="M100,32 C73,40 56,65 59,94 C60,103 71,110 87,113 L100,113 Z" fill="url(#ship)"/>
<!-- main sail (billowing aft) -->
<path d="M100,14 C147,26 168,73 160,114 C158,127 140,137 119,140 L100,140 Z" fill="url(#ship)"/>
<!-- pirate pennant -->
<path d="M100,7 L126,13 L109,18 L126,23 L100,30 Z" fill="url(#ship)"/>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@@ -2,5 +2,5 @@
#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]
fn main() {
mtgc_app_lib::run()
mtgc_lib::run()
}

View File

@@ -1,6 +1,6 @@
{
"$schema": "https://schema.tauri.app/config/2",
"productName": "MTG Library",
"productName": "mtgc",
"version": "0.1.0",
"identifier": "com.garrettmills.mtgc",
"build": {
@@ -13,7 +13,7 @@
"windows": [
{
"label": "main",
"title": "MTG Library",
"title": "mtgc",
"width": 1200,
"height": 800,
"resizable": true

View File

@@ -45,6 +45,32 @@ const ICON_DOWNLOAD = svg(
16,
);
/**
* mtgc's logomark: an original pirate-ship silhouette in the terracotta brand
* color (a nod to the MTG card "Pirate Ship", not a reproduction of its art).
* `gradientId` must be unique per instance rendered on the page at once.
*/
function ShipLogo({ size = 24, gradientId }: { size?: number; gradientId: string }) {
return (
<svg viewBox="0 0 200 200" width={size} height={size}>
<defs>
<linearGradient id={gradientId} x1="0" y1="0" x2="0" y2="1">
<stop offset="0" stopColor="var(--accent-hover)" />
<stop offset="1" stopColor="var(--accent-active)" />
</linearGradient>
</defs>
<g fill={`url(#${gradientId})`}>
<path d="M21,137 L179,137 L159,176 Q100,193 41,176 Z" />
<rect x="21" y="133" width="158" height="6" rx="3" />
<rect x="95" y="7" width="10" height="127" />
<path d="M100,32 C73,40 56,65 59,94 C60,103 71,110 87,113 L100,113 Z" />
<path d="M100,14 C147,26 168,73 160,114 C158,127 140,137 119,140 L100,140 Z" />
<path d="M100,7 L126,13 L109,18 L126,23 L100,30 Z" />
</g>
</svg>
);
}
const NAV: { id: Tab; label: string; icon: ReactNode }[] = [
{ id: "add", label: "Add Cards", icon: svg(<path d="M12 5v14M5 12h14" />) },
{
@@ -223,8 +249,10 @@ export default function App() {
<div className="app">
<nav className="nav-rail">
<div className="brand">
<span className="brand-mark">M</span>
<span className="brand-text">MTG Library</span>
<span className="brand-mark">
<ShipLogo size={20} gradientId="brand-ship-grad" />
</span>
<span className="brand-text">mtgc</span>
</div>
<div className="nav-items">
@@ -373,8 +401,10 @@ export default function App() {
<div className="content">
{!ready ? (
<div className="empty-state">
<div className="empty-mark">✦</div>
<h2>Welcome to your MTG library</h2>
<div className="empty-mark">
<ShipLogo size={40} gradientId="empty-ship-grad" />
</div>
<h2>Welcome to mtgc</h2>
<p className="hint">
No card database yet. Click <strong>Download card data</strong> to fetch
the latest cards from Scryfall (a few hundred MB, about a minute). The

View File

@@ -232,10 +232,7 @@ select option {
width: 34px;
height: 34px;
border-radius: 10px;
background: linear-gradient(150deg, var(--accent-hover), var(--accent-active));
color: #fff;
font-weight: 800;
font-size: 19px;
background: linear-gradient(150deg, var(--bg-elev), var(--bg-rail));
display: flex;
align-items: center;
justify-content: center;
@@ -543,15 +540,13 @@ select option {
gap: 14px;
}
.empty-mark {
width: 72px;
height: 72px;
border-radius: 20px;
width: 88px;
height: 88px;
border-radius: 22px;
display: flex;
align-items: center;
justify-content: center;
font-size: 36px;
color: #fff;
background: linear-gradient(150deg, var(--accent-hover), var(--accent-active));
background: linear-gradient(150deg, var(--bg-elev), var(--bg-rail));
box-shadow: 0 10px 30px var(--accent-glow);
}
.empty-state h2 {