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

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 {