diff --git a/CLAUDE.md b/CLAUDE.md index 35046aa1..2c382e6a 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -9,8 +9,11 @@ Working rules for this repo: ## Project notes -- **Product display name is "Solo Adventurer's Journal"** (in-app titles, platform - manifests, web title/manifest, README H1). This is DISTINCT from two things that +- **Product display name is "Loreseer"** (tagline "The oracle behind your + adventure"; in-app titles, platform manifests, web title/manifest, README H1). + Renamed from the former "Solo Adventurer's Journal"; see + `docs/superpowers/notes/2026-06-26-product-name-brainstorm.md`. This is DISTINCT + from two things that intentionally keep the old "juice" identifier: (1) the **Juice oracle** — the jrruethe/juice oracle *system* the app implements (the `'juice'`/`'Juice'` oracle id, `fate-juice`, the "Juice oracle" opt-in system + badge) — never rename these; diff --git a/README.md b/README.md index 1601c8ab..2a760449 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,6 @@ -# Solo Adventurer's Journal +# Loreseer + +*The oracle behind your adventure.* **Play it now:** https://taylor-software.github.io/juice/ — free, no account, your campaigns stay on your device. diff --git a/THIRD_PARTY.md b/THIRD_PARTY.md index 57f7d1aa..9d1c5b9a 100644 --- a/THIRD_PARTY.md +++ b/THIRD_PARTY.md @@ -1,6 +1,6 @@ # Third-party content & licenses -Solo Adventurer's Journal incorporates third-party tabletop content, oracle +Loreseer incorporates third-party tabletop content, oracle tables, and artwork under the licenses below. This file is the canonical inventory; in-app attributions live in **Settings → Third-party content** (`lib/features/settings_sheet.dart`), and each vendored data set carries its diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index a31abce0..d1e68f20 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -1,6 +1,6 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/build_app_icon.py b/build_app_icon.py new file mode 100644 index 00000000..617f5280 --- /dev/null +++ b/build_app_icon.py @@ -0,0 +1,159 @@ +#!/usr/bin/env python3 +"""Loreseer app icon generator — source of truth for the app icon. + +Concept: 'eye-in-open-book' — a gold eye (upper lid + radiant iris) above an +open book whose fanned pages form the lower lid, on a deep indigo/violet field. +Brand palette: deep indigo/violet field + warm gold (the mystical/oracle lane). + +This script is the source of truth (like build_oracle.py et al): it writes the +re-editable vector master `assets/icon/app_icon.svg`, the 1024 raster master +`assets/icon/app_icon.png`, and every derived platform asset at the exact sizes +the project already ships (web icons + maskable + favicon, Android mipmaps, iOS ++ macOS appiconsets, Windows .ico). Edit this script, then: + + pip install cairosvg Pillow # one-time (not part of the app's Dart stack) + python3 build_app_icon.py + +`dart run flutter_launcher_icons` (configured in pubspec.yaml from +assets/icon/app_icon.png) reproduces the same platform assets from the PNG +master, so either path works; this script additionally keeps the SVG in sync. +""" +import io +import os +import cairosvg +from PIL import Image + +ROOT = os.path.dirname(os.path.abspath(__file__)) + +# ---- palette ---- +BG_CTR, BG_EDGE = "#3a2f80", "#14122e" +PARCH = "#f4e9cf" +GOLD_HI, GOLD, AMBER = "#ffe07a", "#f2c14e", "#c87b22" +PUPIL = "#1b1740" +PAGE_HI, PAGE_LO = "#fff6df", "#e7c878" + +DEFS = f''' + + + + + + + + + + + + + + + + + ''' + +BG = f''' + + + + + + ''' + +FG = f''' + + + + + + + + + + + + + + + + + + + + + ''' + + +def svg(fg_scale=1.0): + fg = FG + if fg_scale != 1.0: + fg = (f'{FG}') + return ('' + '{DEFS}{BG}{fg}') + + +def render(fg_scale=1.0, size=1024): + png = cairosvg.svg2png(bytestring=svg(fg_scale).encode(), + output_width=size, output_height=size) + return Image.open(io.BytesIO(png)).convert("RGBA") + + +def save(img, rel): + path = os.path.join(ROOT, rel) + os.makedirs(os.path.dirname(path), exist_ok=True) + img.save(path) + + +def main(): + master = render(1.0, 1024) + save(master, "assets/icon/app_icon.png") + with open(os.path.join(ROOT, "assets/icon/app_icon.svg"), "w") as f: + f.write(svg(1.0)) + + def down(size): + return master.resize((size, size), Image.LANCZOS) + + # maskable master: content scaled into the safe zone, full-bleed background + maskable = render(0.80, 1024) + + # web + save(down(192), "web/icons/Icon-192.png") + save(down(512), "web/icons/Icon-512.png") + save(maskable.resize((192, 192), Image.LANCZOS), "web/icons/Icon-maskable-192.png") + save(maskable.resize((512, 512), Image.LANCZOS), "web/icons/Icon-maskable-512.png") + save(down(16), "web/favicon.png") + + # android (legacy full-bleed launcher) + for d, s in [("mdpi", 48), ("hdpi", 72), ("xhdpi", 96), + ("xxhdpi", 144), ("xxxhdpi", 192)]: + save(down(s), f"android/app/src/main/res/mipmap-{d}/ic_launcher.png") + + # ios (flatten alpha — iOS icons must be opaque) + ios_dir = "ios/Runner/Assets.xcassets/AppIcon.appiconset" + for fn in os.listdir(os.path.join(ROOT, ios_dir)): + if fn.endswith(".png"): + s = Image.open(os.path.join(ROOT, ios_dir, fn)).size[0] + save(down(s).convert("RGB"), f"{ios_dir}/{fn}") + + # macos + mac_dir = "macos/Runner/Assets.xcassets/AppIcon.appiconset" + for fn in os.listdir(os.path.join(ROOT, mac_dir)): + if fn.endswith(".png"): + s = Image.open(os.path.join(ROOT, mac_dir, fn)).size[0] + save(down(s), f"{mac_dir}/{fn}") + + # windows .ico + master.save(os.path.join(ROOT, "windows/runner/resources/app_icon.ico"), + sizes=[(16, 16), (24, 24), (32, 32), (48, 48), + (64, 64), (128, 128), (256, 256)]) + + print("generated all platform icon assets.") + + +if __name__ == "__main__": + main() diff --git a/docs/design-overview.md b/docs/design-overview.md index 1bb1168f..018f7289 100644 --- a/docs/design-overview.md +++ b/docs/design-overview.md @@ -1,6 +1,6 @@ -# Solo Adventurer's Journal — Design Overview +# Loreseer — Design Overview -This document describes every major screen, feature, and configuration option in **Solo Adventurer's Journal** (internal id: `juice`). It is intended for designers who need a comprehensive map of the product's UI surfaces and options. +This document describes every major screen, feature, and configuration option in **Loreseer** (internal id: `juice`). It is intended for designers who need a comprehensive map of the product's UI surfaces and options. All screenshots are in `docs/screenshots/design/`. diff --git a/docs/superpowers/notes/2026-06-26-product-name-brainstorm.md b/docs/superpowers/notes/2026-06-26-product-name-brainstorm.md new file mode 100644 index 00000000..5d889bd3 --- /dev/null +++ b/docs/superpowers/notes/2026-06-26-product-name-brainstorm.md @@ -0,0 +1,82 @@ +# Product name brainstorm — adopted: **Loreseer** + +**Date:** 2026-06-26 +**Status:** ADOPTED. The display name was renamed from *Solo Adventurer's Journal* +to **Loreseer** (tagline "The oracle behind your adventure") in this same change — +display strings only (in-app titles, platform manifests, web title/manifest, +README H1, pubspec/THIRD_PARTY/design-overview prose). Internal `juice` identifiers +are untouched per `CLAUDE.md`. This note records the exploration behind the choice. + +## Brief + +Rename target: the **display name only** (in-app titles, platform manifests, web +title/manifest, README H1). Per `CLAUDE.md`, the *Juice oracle* identity and the +internal `juice_oracle` / `juice.*` / `net.taylorsoftware.juice` identifiers stay +put — a rename touches display strings, not stable ids. + +Chosen lane (from brainstorm with the maintainer): +- **Vibe:** mystical / evocative (north star was *Soothsayer*). +- **Brandable:** own the word, not descriptive-on-the-tin. +- **Angle:** lean into the **GM-tool / unseen-GM** framing (a feature being added). + +## Front-runner: Loreseer + +A coined compound — **lore·seer** — that reads on two levels at once: +*one who sees the unfolding story* and the *GM-as-oracle* role. The word already +carries fantasy resonance to players but has no commercial owner. + +### Clearance findings (web check, 2026-06-26) + +- **No product collision.** No app, game, or company called "Loreseer" on the App + Store, Steam, or itch. The word appears only as fantasy flavor (a Minecraft-server + faith title; a web-serial term). +- **Soft phonetic neighbors only:** *Lore Seeker* (a deck-building game, two words) + and *Loreseeker Games* (a studio making a mermaid game, *SIREN*). Different + spelling, different niche — not our lane. +- **Domain — RESOLVED.** Canonical/primary is **`loreseer.app`** (secured) — exact + word, app-native TLD, no hyphen or prefix. The exact-match `loreseer.com` is taken + (matched the inconclusive HTTP 403 during clearance), a minor traffic leak but not + a blocker. Available defensive options at the time of checking: `loreseer.online`, + `theloreseer.com`, `lore-seer.com` (none required now that `.app` is the front door; + hyphenated `.com` is weak as a primary regardless). + +### Why it won the bake-off + +Three finalists were clearance-tested: + +| Name | TTRPG collision | Ownability | Verdict | +|---|---|---|---| +| **Loreseer** | none (only fantasy-flavor uses) | high (coined word) | **pick** — clear + brandable | +| **Sayer** | none in solo-RPG | low — common word + surname; `sayers.com` is a 40-yr IT consultancy; trademark/SEO crowding | runner-up if minimal/modern feel preferred | +| **Divinum** | **direct** — live action game on Steam (app 1148130), `divinumgame.com`, `@DivinumGame` | blocked — same industry, live brand owns domain/handle | retired | + +## Creative direction (if adopted) + +### Positioning +> **Loreseer** — your unseen GM. The app sees the story so you can live it. + +### Taglines +- Hero (atmosphere): *"It sees what happens next."* +- Store subtitle (clarity): *"Solo & GM-less RPG companion."* +- Alternates: *"Every story has a seer." / "No GM? No problem." / "Your table of one."* + +### Wordmark / styling +- Lowercase **`loreseer`** for the icon wordmark + UI; title-case **Loreseer** in prose. +- Emphasize the **lore·seer** seam (weight/color shift, or an iris motif in the "ee"). +- Icon directions (fit the facts-only, no-rulebook-IP posture): an eye formed from an + open book; a die with an eye on its up-face; a keyhole/iris hybrid. +- Palette: deep indigo/violet + warm gold (prophecy/candlelight; also nods to the + light-timer mechanic). Avoid generic-fantasy green. + +### Bonus: names the GM feature +The brand personifies the in-app AI GM seam as **"the Seer"** — *"Ask the Seer,"* +*"the Seer narrates,"* *"the Seer sees a complication."* Turns the product name into +the unseen-GM voice, which is exactly the framing the new GM angle wants. + +## If/when adopted — rename checklist (display strings only) + +- In-app titles, platform manifests (iOS/Android/macOS), web `index.html` title + + `manifest.json`, README H1. +- Do **NOT** touch: `'juice'`/`'Juice'` oracle id, `fate-juice`, `juice_oracle` + package, `juice.*` SharedPreferences keys, `juice-oracle` campaign marker, + `.juice.json`/`.juice.zip` extensions, `net.taylorsoftware.juice` bundle id. diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png index f14b85f8..dbf981b4 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png index 27035be8..404407b3 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png index a6486d36..9351d72f 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png index 52d21d8d..f9ba9cc0 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png index 6c0ebbee..787b16dd 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png index e7a0197e..cc50bd9d 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png index 3446f99e..9c72d571 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png index a6486d36..9351d72f 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png index 3dc81086..46160ee3 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png index 6c4a8fe7..eae98343 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png index 46d199c1..41fc2af3 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png index 27129b9b..b4f00465 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png index ab51200f..1b675a1f 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png index 4929a592..fef0ce72 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png index 6c4a8fe7..eae98343 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png index f39a8040..d5066b26 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png index fbd6cb21..8c3b6649 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png index 2ec2a37b..34a9ac0a 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png index 211c562b..dec963b0 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png index 6d07a898..5c112730 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png index 78fc6f52..a8068efe 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png differ diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist index a523c75a..cc6faf39 100644 --- a/ios/Runner/Info.plist +++ b/ios/Runner/Info.plist @@ -7,7 +7,7 @@ CFBundleDevelopmentRegion $(DEVELOPMENT_LANGUAGE) CFBundleDisplayName - Solo Adventurer's Journal + Loreseer CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier diff --git a/lib/app.dart b/lib/app.dart index c3268f46..295715d0 100644 --- a/lib/app.dart +++ b/lib/app.dart @@ -13,7 +13,7 @@ class JuiceApp extends ConsumerWidget { Widget build(BuildContext context, WidgetRef ref) { final oracle = ref.watch(oracleProvider); return MaterialApp( - title: "Solo Adventurer's Journal", + title: "Loreseer", debugShowCheckedModeBanner: false, theme: AppTheme.light(), darkTheme: AppTheme.dark(), diff --git a/lib/features/help_screen.dart b/lib/features/help_screen.dart index 3c283317..8a9b54f2 100644 --- a/lib/features/help_screen.dart +++ b/lib/features/help_screen.dart @@ -108,7 +108,7 @@ class _HelpScreenState extends ConsumerState { label: const Text('Software licenses'), onPressed: () => showLicensePage( context: context, - applicationName: "Solo Adventurer's Journal"), + applicationName: "Loreseer"), ), ], ], diff --git a/lib/features/launcher_screen.dart b/lib/features/launcher_screen.dart index 9825a211..7d9086c4 100644 --- a/lib/features/launcher_screen.dart +++ b/lib/features/launcher_screen.dart @@ -206,8 +206,8 @@ class LauncherScreen extends ConsumerWidget { padding: const EdgeInsets.all(24), shrinkWrap: true, children: [ - Text('Juice', style: theme.textTheme.headlineMedium), - Text('Solo TTRPG toolkit', + Text('Loreseer', style: theme.textTheme.headlineMedium), + Text('The oracle behind your adventure', style: theme.textTheme.bodyMedium ?.copyWith(color: theme.colorScheme.onSurfaceVariant)), const SizedBox(height: 24), diff --git a/lib/shared/home_shell.dart b/lib/shared/home_shell.dart index d0b94bf5..d9a0c0db 100644 --- a/lib/shared/home_shell.dart +++ b/lib/shared/home_shell.dart @@ -522,10 +522,10 @@ class _HomeShellState extends ConsumerState { return Scaffold( appBar: AppBar( title: sessionName == null - ? const Text("Solo Adventurer's Journal") + ? const Text("Loreseer") : Column( children: [ - const Text("Solo Adventurer's Journal"), + const Text("Loreseer"), Text(sessionName, maxLines: 1, overflow: TextOverflow.ellipsis, diff --git a/lib/state/campaign_io.dart b/lib/state/campaign_io.dart index 2ddfcce2..07624829 100644 --- a/lib/state/campaign_io.dart +++ b/lib/state/campaign_io.dart @@ -68,7 +68,7 @@ CampaignImport parseCampaign(String raw) { } if (decoded['app'] != _appMarker) { throw const FormatException( - "Not a Solo Adventurer's Journal campaign file"); + "Not a Loreseer campaign file"); } final version = decoded['schemaVersion']; if (version is! int || version > campaignSchemaVersion) { diff --git a/linux/runner/my_application.cc b/linux/runner/my_application.cc index 2fbd2e80..7f189ec6 100644 --- a/linux/runner/my_application.cc +++ b/linux/runner/my_application.cc @@ -45,11 +45,11 @@ static void my_application_activate(GApplication* application) { if (use_header_bar) { GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "Solo Adventurer's Journal"); + gtk_header_bar_set_title(header_bar, "Loreseer"); gtk_header_bar_set_show_close_button(header_bar, TRUE); gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); } else { - gtk_window_set_title(window, "Solo Adventurer's Journal"); + gtk_window_set_title(window, "Loreseer"); } gtk_window_set_default_size(window, 1280, 720); diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png index f14b85f8..5d808c6a 100644 Binary files a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png and b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png differ diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png index 44854a84..09d0f84f 100644 Binary files a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png and b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png differ diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png index 52adf196..f8130c9b 100644 Binary files a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png and b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png differ diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png index 0de7f622..85467d3d 100644 Binary files a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png and b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png differ diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png index 0bbcfe83..549c55c9 100644 Binary files a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png and b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png differ diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png index cba2b9cd..54585e87 100644 Binary files a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png and b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png differ diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png index 218b1039..b58e3295 100644 Binary files a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png and b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png differ diff --git a/macos/Runner/Info.plist b/macos/Runner/Info.plist index 198a00ce..db222aa1 100644 --- a/macos/Runner/Info.plist +++ b/macos/Runner/Info.plist @@ -15,7 +15,7 @@ CFBundleName $(PRODUCT_NAME) CFBundleDisplayName - Solo Adventurer's Journal + Loreseer CFBundlePackageType APPL CFBundleShortVersionString diff --git a/pubspec.yaml b/pubspec.yaml index 14ab1526..e760f40b 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,5 +1,5 @@ name: juice_oracle -description: "Solo Adventurer's Journal — a solo-RPG oracle & campaign journal implementing the Juice oracle (jrruethe/juice)." +description: "Loreseer — the oracle behind your adventure. A solo-RPG oracle & campaign journal implementing the Juice oracle (jrruethe/juice)." publish_to: "none" version: 0.1.0+1 @@ -56,10 +56,13 @@ flutter: - assets/tarot/ - assets/playing/ -# App icon generation: `dart run flutter_launcher_icons`. Source art is the -# user-provided 1024px image at assets/icon/app_icon.png (full-bleed circular -# design; each OS applies its own mask, so Android uses the legacy full-bleed -# icon rather than an adaptive fg/bg split). +# App icon: the "eye-in-open-book" mark (gold eye + open book on indigo). The +# source of truth is build_app_icon.py, which renders the editable vector +# assets/icon/app_icon.svg + the 1024 raster assets/icon/app_icon.png and all +# platform assets (deps: cairosvg + Pillow, not part of the Dart stack). The +# full-bleed PNG also feeds `dart run flutter_launcher_icons` (config below); +# each OS applies its own mask, so Android uses the legacy full-bleed icon +# rather than an adaptive fg/bg split. flutter_launcher_icons: image_path: "assets/icon/app_icon.png" android: true diff --git a/web/favicon.png b/web/favicon.png index 52adf196..f8130c9b 100644 Binary files a/web/favicon.png and b/web/favicon.png differ diff --git a/web/icons/Icon-192.png b/web/icons/Icon-192.png index 7207c6a5..5be60d9b 100644 Binary files a/web/icons/Icon-192.png and b/web/icons/Icon-192.png differ diff --git a/web/icons/Icon-512.png b/web/icons/Icon-512.png index cba2b9cd..54585e87 100644 Binary files a/web/icons/Icon-512.png and b/web/icons/Icon-512.png differ diff --git a/web/icons/Icon-maskable-192.png b/web/icons/Icon-maskable-192.png index 7207c6a5..7728bbdf 100644 Binary files a/web/icons/Icon-maskable-192.png and b/web/icons/Icon-maskable-192.png differ diff --git a/web/icons/Icon-maskable-512.png b/web/icons/Icon-maskable-512.png index cba2b9cd..8bcdee04 100644 Binary files a/web/icons/Icon-maskable-512.png and b/web/icons/Icon-maskable-512.png differ diff --git a/web/index.html b/web/index.html index d9844ee1..3432b54a 100644 --- a/web/index.html +++ b/web/index.html @@ -24,13 +24,13 @@ - + - Solo Adventurer's Journal + Loreseer — The oracle behind your adventure