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>
2
Cargo.lock
generated
@@ -1816,7 +1816,7 @@ dependencies = [
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "mtgc-app"
|
||||
name = "mtgc"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"mtgc-core",
|
||||
|
||||
17
README.md
@@ -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
|
||||
```
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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]
|
||||
|
||||
|
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 5.8 KiB After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 3.5 KiB |
|
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 6.3 KiB |
|
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 9.0 KiB |
|
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 9.7 KiB |
|
Before Width: | Height: | Size: 6.6 KiB After Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 7.0 KiB After Width: | Height: | Size: 27 KiB |
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 3.9 KiB |
|
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 5.2 KiB |
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 2.7 KiB |
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 2.4 KiB |
|
Before Width: | Height: | Size: 4.0 KiB After Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 2.5 KiB |
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 6.3 KiB |
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 2.4 KiB |
|
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 5.2 KiB |
|
Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 5.4 KiB |
|
Before Width: | Height: | Size: 3.9 KiB After Width: | Height: | Size: 8.4 KiB |
|
Before Width: | Height: | Size: 7.3 KiB After Width: | Height: | Size: 28 KiB |
|
Before Width: | Height: | Size: 4.6 KiB After Width: | Height: | Size: 8.7 KiB |
|
Before Width: | Height: | Size: 5.2 KiB After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 9.9 KiB After Width: | Height: | Size: 46 KiB |
|
Before Width: | Height: | Size: 5.9 KiB After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 29 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 71 KiB |
|
Before Width: | Height: | Size: 730 B After Width: | Height: | Size: 916 B |
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 2.1 KiB |
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 2.1 KiB |
|
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 3.3 KiB |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 3.2 KiB |
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 3.2 KiB |
|
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 5.1 KiB |
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 2.1 KiB |
|
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 4.5 KiB |
|
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 4.5 KiB |
|
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 7.1 KiB |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 473 KiB |
|
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 7.1 KiB |
|
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 4.3 KiB |
|
Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 4.0 KiB After Width: | Height: | Size: 11 KiB |
35
src-tauri/icons/logo-source.svg
Normal 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 |
@@ -2,5 +2,5 @@
|
||||
#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]
|
||||
|
||||
fn main() {
|
||||
mtgc_app_lib::run()
|
||||
mtgc_lib::run()
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
38
src/App.tsx
@@ -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
|
||||
|
||||
@@ -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 {
|
||||
|
||||