From 7eeb54f65305d4aa6075c4f7776a015b632dd1e4 Mon Sep 17 00:00:00 2001 From: PJ Date: Mon, 31 Aug 2026 17:26:31 +0530 Subject: [PATCH] refactor(ui): call a book a project A book is the use case Margin was built for, not the limit of it. Blog posts published straight to the web are coming, and "New book" on the shelf is the wrong invitation for that. Project covers both without promising anything the app does not do. This is user-visible strings only. Internal identifiers keep saying book, because renaming bookId and setBooks is churn nobody reads. Claude-Session: https://claude.ai/code/session_018HwEWvoE1NkkUjJCMLSnup --- src-tauri/src/lib.rs | 2 +- src-tauri/src/library.rs | 2 +- src/components/BackupSettings.tsx | 2 +- src/components/CoverView.tsx | 2 +- src/components/EditorView.tsx | 4 ++-- src/components/ExportPreview.tsx | 2 +- src/components/FindBar.tsx | 2 +- src/components/Library.tsx | 12 ++++++------ src/components/MoveChapterDialog.tsx | 8 ++++---- src/components/Settings.tsx | 2 +- src/components/Sidebar.tsx | 4 ++-- 11 files changed, 21 insertions(+), 21 deletions(-) diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index 69c5052..8a70a9e 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -18,7 +18,7 @@ use tauri::{Emitter, Runtime}; fn build_menu(handle: &tauri::AppHandle) -> tauri::Result> { let menu = Menu::default(handle)?; - let new_book = MenuItemBuilder::with_id("new-book", "New Book") + let new_book = MenuItemBuilder::with_id("new-book", "New Project") .accelerator("CmdOrCtrl+N") .build(handle)?; let save = MenuItemBuilder::with_id("save", "Save") diff --git a/src-tauri/src/library.rs b/src-tauri/src/library.rs index 1cd497a..5ad2644 100644 --- a/src-tauri/src/library.rs +++ b/src-tauri/src/library.rs @@ -16,7 +16,7 @@ pub struct BookSummary { fn corrupt_summary(stem: &str) -> BookSummary { BookSummary { id: stem.to_string(), - title: "Unreadable book".to_string(), + title: "Unreadable project".to_string(), author: String::new(), corrupt: true, updated_at: 0, diff --git a/src/components/BackupSettings.tsx b/src/components/BackupSettings.tsx index 2178a30..dc19520 100644 --- a/src/components/BackupSettings.tsx +++ b/src/components/BackupSettings.tsx @@ -141,7 +141,7 @@ export function BackupSettings() { disabled={working || remoteCount === 0} onClick={() => setConfirmRestore(true)} > - {remoteCount === null ? "Restore from Drive" : `Restore ${remoteCount} book${remoteCount === 1 ? "" : "s"}`} + {remoteCount === null ? "Restore from Drive" : `Restore ${remoteCount} project${remoteCount === 1 ? "" : "s"}`} diff --git a/src/components/CoverView.tsx b/src/components/CoverView.tsx index ad28f12..b34bf2e 100644 --- a/src/components/CoverView.tsx +++ b/src/components/CoverView.tsx @@ -72,7 +72,7 @@ export function CoverView() { Upload image -

Title, subtitle & author are set in Book setup.

+

Title, subtitle & author are set in Project setup.

)} - @@ -491,7 +491,7 @@ export function EditorView() { {escArmed && (
- Press Esc again for All books + Press Esc again for All projects
)} diff --git a/src/components/ExportPreview.tsx b/src/components/ExportPreview.tsx index c94d418..011f590 100644 --- a/src/components/ExportPreview.tsx +++ b/src/components/ExportPreview.tsx @@ -196,7 +196,7 @@ function ExportPreviewModal() {
-

Typesetting your book…

+

Typesetting your project…

)} diff --git a/src/components/FindBar.tsx b/src/components/FindBar.tsx index 92df5ab..da9eb45 100644 --- a/src/components/FindBar.tsx +++ b/src/components/FindBar.tsx @@ -275,7 +275,7 @@ export function FindBar({ editor, open, initialExpanded, onClose }: FindBarProps title="Replace All scope" onClick={() => setScope((s) => (s === "chapter" ? "book" : "chapter"))} > - {scope === "chapter" ? "This chapter" : "Whole book"} + {scope === "chapter" ? "This chapter" : "Whole project"}
)} diff --git a/src/components/Library.tsx b/src/components/Library.tsx index 3a7cdee..29135f5 100644 --- a/src/components/Library.tsx +++ b/src/components/Library.tsx @@ -71,7 +71,7 @@ export function Library({ onOpen }: { onOpen: (book: Book) => void }) { const openById = (id: string) => loadBook(id) .then(onOpen) - .catch((e) => setNotice(`Could not open book: ${e}`)); + .catch((e) => setNotice(`Could not open project: ${e}`)); const removeBook = async () => { if (!pendingDelete) return; @@ -109,7 +109,7 @@ export function Library({ onOpen }: { onOpen: (book: Book) => void }) {

- Move {label} out of this book and into: + Move {label} out of this project and into:

{books === null ? ( -

Loading books…

+

Loading projects…

) : books.length === 0 ? ( -

There is no other book to move this into yet.

+

There is no other project to move this into yet.

) : (
    {books.map((b) => ( diff --git a/src/components/Settings.tsx b/src/components/Settings.tsx index bc61907..9a97bdf 100644 --- a/src/components/Settings.tsx +++ b/src/components/Settings.tsx @@ -127,7 +127,7 @@ export function Settings({ onClose, onSave }: { onClose: () => void; onSave: ()
    e.stopPropagation()}>
    -

    Book setup

    +

    Project setup

    diff --git a/src/components/Sidebar.tsx b/src/components/Sidebar.tsx index 95140b6..f051413 100644 --- a/src/components/Sidebar.tsx +++ b/src/components/Sidebar.tsx @@ -169,9 +169,9 @@ export function Sidebar({ onNavigate }: { onNavigate?: () => void }) { return (