Publisher delete modals, NC import, and wizard polish
development-v2.2.0.39-alpha
Released 2026-11-04
Incomplete wizard and catalog deletes use in-app confirmation modals with reliable Livewire actions (no broken browser confirm). Novelcrafter import detects real chapter headings on Windows; wizard autosaves fields and review is not blocked by optional polish items.
- Books: Delete incomplete wizard / catalog book / unsaved session via modal; Yes calls dedicated purge actions after server sets pending state.
- Novelcrafter ZIP: Python path via PUBLISHER_PYTHON; chapter titles from headings (not Scene 1 only); import progress UI.
- Wizard autosave to book row, draft JSON, and manuscript file; wire-action loading spinners; modal Alpine/Livewire fixes.
Books page layout and wizard-only new titles
development-v2.2.0.38-alpha
Released 2026-11-04
Publisher Books uses a wide two-column card layout on large screens so build actions fill the row. New book always starts the wizard; legacy /books/create redirects there.
- Book cards: metadata and actions left, build outputs right (xl); full-width action and build button grids.
- New book CTA opens the manuscript wizard; publisher.books.create redirects to /books/wizard.
- Build outputs grouped in three columns; light/dark styling on cards and controls.
Book delete on Books list and wizard purge toasts
development-v2.2.0.37-alpha
Released 2026-11-04
Delete book on the main Publisher catalog purges files and shows a success toast. Wizard Cancel delete was fixed to run reliably; Livewire show-toast drives immediate feedback on the Books page.
- Each catalog title: Delete book with confirm dialog and BookPurgeService (sources, output, audiobooks).
- Wizard Yes, delete everything: flush editors, full redirect, toast via session flash on Books.
- Livewire show-toast listener in toast stack; FlashToasts messages for wizard and catalog deletes.
Wizard cancel, autosave, and incomplete drafts
development-v2.2.0.36-alpha
Released 2026-11-04
The book wizard autosaves progress (session before a book exists, draft JSON after). Books lists incomplete wizards to resume or delete. Cancel opens a confirmation modal and purges the book and files when confirmed.
- Cancel on every wizard step with irreversible delete confirmation; BookPurgeService removes sources, output, and audiobook folders.
- Incomplete wizards panel on Books: resume, start fresh, or delete session-only and draft books (wizard_step on books).
- Draft books stay inactive and out of the Python registry until manuscript save completes the wizard.
Opening pages, NC import chapters, image library
development-v2.2.0.35-alpha
Released 2026-11-04
Wizard step Opening pages splits epigraph, rhyme, dedication, and contents. Novelcrafter ZIP import maps chapters reliably (including DOCX) and copies export images into an Image library tab on Chapter photos to assign chapter art.
- Opening pages step replaces vague front matter; dedication syncs to EPUB/print.
- NC import requires parsed chapters; DOCX converted via heading styles; gallery images from ZIP.
- Chapter photos: Image library tab assigns import/codex art to chapter-N slots; codex text stays under novelcrafter-codex/.
Publisher migrate hotfix
development-v2.2.0.34-alpha
Released 2026-11-04
Deploy migrate no longer fails when books.user_id already exists. The guarded migration skips adding the column when it is present; wizard dead code removed.
- 2026_11_04 books.user_id migration uses Schema::hasColumn before Schema::table.
- Fixes duplicate-column errors on servers that already had user_id on books.
- BookManuscriptWizard: removed unused startBook helper.
Book wizard flow and stable sources paths
development-v2.2.0.33-alpha
Released 2026-11-04
The manuscript wizard starts with scratch vs import, parses uploads first, then title and slug on step two. New books store files under sources/{user_id}/{book_id}/ — not a user-chosen folder — so slug and title can change without moving assets.
- Seven-step wizard: Start → Title & slug → Metadata → Front matter → Chapters → Review → Export.
- BookStoragePathService assigns user_id and source_dir on create; book editor shows read-only storage path.
- manuscript_parse.py splits Pillow-free parsing for imports/exports; BookStoragePathService uses books.user_id for stable paths; tests updated.
Publisher Python on Ubuntu and Forge
development-v2.2.0.32-alpha
Released 2026-11-03
Publisher no longer calls bare python on Linux. Default interpreter is /usr/bin/python3 when PUBLISHER_PYTHON is unset or empty; README documents a shared Forge venv path.
- config/publisher.php ignores empty PUBLISHER_PYTHON= and uses python3 on non-Windows servers.
- README Tales Publisher: shared/publisher-venv + stable PUBLISHER_PYTHON for Forge deploys.
- PublisherPythonConfigTest; .env.example clarifies local vs production Python paths.
Novelcrafter export ZIP import
development-v2.2.0.31-alpha
Released 2026-11-03
Book wizard accepts a Novelcrafter export ZIP: unpacks novel.md (or novel.docx), maps acts/chapters/scenes into Publisher chapters, and copies codex folders into sources/.../novelcrafter-codex/.
- novelcrafter_import.py and novelcrafter_manuscript.py; NovelcrafterImportService and wizard upload (.zip).
- Codex entries preserved as entry.md + metadata.json per Novelcrafter layout; pending codex attaches when a new book is created.
- PublisherNovelcrafterImportTest and fixture export; documentation and product doc updated.
Manuscript MD/HTML export and dependency refresh
development-v2.2.0.30-alpha
Released 2026-11-03
Publisher can export each book to combined Markdown and HTML (Novelcrafter-style handoff) via build actions or direct downloads. Composer dependencies updated to current Laravel 13 patch line; local seed workflow unchanged.
- ManuscriptExportService, Python scripts export_manuscript.py and manuscript_html_export.py, routes publisher/books/{book}/export/{md|html}.
- Build panel: Export MD + HTML build plus artifact download links; documentation publisher overview updated.
- composer update (framework 13.40.x, Symfony 8.1); advisory policy allows Livewire 3.8 until upgrade; PublisherManuscriptExportTest coverage.
Member documentation and Amazon publish handoff
development-v2.2.0.29-alpha
Released 2026-09-30
Logged-in members get a searchable Documentation hub with tutorials and FAQ. Authors get KDP handoff pages: publish kit, checklist, sales CSV import, and optional Seller Central settings.
- /documentation with search, FAQ, and role-aware guides (Manage, Publisher, Analytics).
- Publisher: Amazon guide, per-book publish page, publish kit ZIP, KDP sales dashboard, SP-API OAuth scaffold.
- Tests for documentation catalog and Amazon publisher routes; migration for ISBN/ASIN and KDP report tables.
Publisher light and dark theme
development-v2.2.0.28-alpha
Released 2026-09-30
All Tales Publisher screens now respect the site theme: books list, new/edit book, build actions, cover uploads, and legacy wizard markup via a publisher-surface shell and Tailwind dark utilities.
- layouts/publisher main uses publisher-surface; app.css maps light-only classes to dark variants inside Publisher.
- books-index, book-editor, book-export-actions, book-covers-upload, and build artifact links updated explicitly.
- Rebuild public/build CSS after deploy so dark mode styles load.
Publisher manuscript browse upload
development-v2.2.0.27-alpha
Released 2026-09-30
New and edit book metadata no longer expect you to type a manuscript filename. Browse uploads a .md or .docx, sets the name automatically, and saves the file under sources/ when the book is saved (or immediately on edit).
- ManuscriptFileService and ManagesManuscriptUpload on BookEditor — Browse control with Livewire file upload.
- Auto-fills source_dir from slug when empty; default cover.png and book.epub placeholders for new titles.
- PublisherManuscriptUploadTest covers create + save flow.
Publisher new book form dark mode
development-v2.2.0.26-alpha
Released 2026-09-30
The Publisher new/edit book screen (/publisher/books/create and edit) now uses Tailwind dark: variants on the form card, sections, textareas, selects, and links so it matches the rest of the admin shell in light and dark theme.
- book-editor.blade.php — dual-theme form panels, inputs, and status flash.
- Aligns with existing x-text-input and x-input-label dark styles on the Publisher layout.
Author role provisions roster profile
development-v2.2.0.25-alpha
Released 2026-09-30
Approving or assigning the author account role automatically creates an owned roster author profile so My books and Publisher work immediately — no separate staff linking step and no blocking dashboard message.
- AuthorProfileProvisioner runs on UserRoles::grant(Author) and on first Publisher visit for legacy author accounts.
- Owned author_members pivot (owner) unlocks Publisher book list and roster author selection for new titles.
- AuthorProfileProvisionerTest plus RoleTestUsersSeeder order fix for J.M. Blackwell demo author.
Author role opens Publisher
development-v2.2.0.24-alpha
Released 2026-09-30
The author account role alone grants access to Tales Publisher. Roster profile administrators still control which books appear in your list and which public author profiles new titles attach to — not whether you can open Publisher.
- PublisherAccess::canViewAny is true for superadmin or Author role; removed incorrect gate on profile linkage.
- Dashboard no longer blocks authors without a roster link; optional note explains attaching books to public author profiles.
- PublisherAccessTest: unlinked author role can open /publisher/books.
My books in the main header
development-v2.2.0.23-alpha
Released 2026-09-30
Logged-in authors see a prominent My books control in the public catalog and marketing header (not buried in the account dropdown). It opens Tales Publisher when the account is roster-linked, or the dashboard with setup guidance when not.
- nav-my-books-link component on catalog, home, admin, and publisher layouts; UserRoles::publisherBooksNavUrl for targets.
- Account menu label aligned to My books; PublisherAccessTest asserts catalog header for seeded author.
- Completes author discoverability on the pages they actually browse (authors, artists, labels, showcases).
Author Publisher navigation
development-v2.2.0.22-alpha
Released 2026-09-30
Authors can find Tales Publisher from the account menu, mobile nav, and dashboard — not only by guessing /publisher. Dashboard explains when the author role is granted but the account is not yet linked to a roster author profile.
- Publisher link when PublisherAccess::canViewAny — roster author owner/admin/manager or superadmin.
- Dashboard hub for author accounts (UserRoles::canAccessDashboard) with Publisher card and setup guidance.
- Manage sidebar uses granted roles for roster console visibility; PublisherAccessTest covers nav and unlinked author 403.
Staff users CRUD and verification resend
development-v2.2.0.21-alpha
Released 2026-09-30
Staff can manage accounts under Manage → Users: search, create, edit roles (including multiple grants), set verified email, and remove users with policy guards. Resend verification no longer 500s when mail fails — users see an error and stay on the notice page.
- Manage → Users at /manage/users — UserPolicy, UserRequest validation, and ManageUsersTest coverage.
- UserRoles::assignableByStaff and syncGrants power the role checkboxes; non–superadmins cannot edit or delete superadmin accounts.
- Email verification resend catches transport errors and redirects with a flash message instead of an uncaught exception.
Multiple account roles
development-v2.2.0.20-alpha
Released 2026-09-30
Members can hold more than one site role (for example Artist and Author). Existing users request additional roles under Profile → Account roles; staff approve in Manage → Role requests without removing roles they already have.
- user_role_grants and user_role_requests tables — migrate on deploy; existing users.role copied into grants.
- UserRoles helper drives permissions (manage, publisher, analytics, staff) across all granted roles.
- Approve adds a grant; primary role column stays the highest-privilege role for display.
Registration roles, legal agreements, and PMA
development-v2.2.0.19-alpha
Released 2026-09-30
Sign-up asks which role you want (fan, label, artist, or author), requires Terms, Privacy, and Levaterra Foundation Member Agreement acceptance (ported from subto), and holds non-fan accounts as fans until email is verified and staff approve. Google users finish agreements on /registration/complete.
- Role requests: after email verification, admin and superadmin get in-app notifications; Manage → Role requests to approve or reject.
- Public legal pages: /terms-of-service, /privacy-policy, /membership-agreement; PMA re-accept flow when agreement version changes.
- Migration user_agreements_and_role_requests — run php artisan migrate on deploy; existing users grandfathered to current legal versions.
Resend mail SDK and registration email
development-v2.2.0.18-alpha
Released 2026-09-30
The official Resend PHP SDK is now a required Composer dependency so Laravel’s resend mail transport works on every deploy; a unit test guards the install. Run composer install after pull and keep a single RESEND_API_KEY in .env so verification emails send on registration.
- composer require resend/resend-php (^1.0) — powers MAIL_MAILER=resend with config/services.php and verification mail after sign-up.
- tests/Unit/ResendMailSdkTest.php ensures the SDK and ResendTransport stay available in CI.
- Deploy: composer install, npm install && npm run build for Publisher assets, php artisan migrate for publisher tables if pending.
Tales Publisher in MalanMusic
development-v2.2.0.17-alpha
Released 2026-09-29
Book production (EPUB, print, audiobook) runs inside MalanMusic at /publisher for superadmin and author accounts, with books linked to roster author profiles and Python build scripts in the app repo.
- New author account role and Publisher sidebar link — superadmin sees all books; authors manage titles for roster profiles they own or administer.
- Livewire UI: book list, editor, manuscript wizard, covers, chapter photos, and build artifacts; registry export via publisher:export-registry.
- Seeded Tales of Twisted Rhyme titles (Three Red Wolves, Beewitched) for J.M. Blackwell; scripts/, sources/, and requirements.txt at project root.
- Test user author@tekys.com (see config/malanmusic.php); pip install -r requirements.txt and Python on PATH for builds on the server.
Navigation and analytics cache fix
development-v2.2.0.16-alpha
Released 2026-09-29
Public and admin navigation group artists, authors, and labels under Talent; Dashboard lives in the account menu; analytics dashboard no longer crashes when cached API results are read from the store.
- Talent dropdown on catalog and marketing headers; reorganized admin sidebar (Overview, Inbox, Public site, Manage, Account).
- Dashboard link moved from the top nav into the user account dropdown for manage roles.
- Analytics reports cache as arrays so /analytics works reliably after deploy (clear cache once if you saw incomplete-object errors).
- GA service account JSON paths gitignored under storage/app/*.json.
Toasts, profile administrators, and location fields
development-v2.2.0.15-alpha
Released 2026-09-29
Flash and validation feedback use a site-wide toast stack; artists, authors, and labels support profile admin requests, staff assignment, and super-admin-approved removals; city, state, and country appear on profiles and in manage CRUD.
- Toast stack on all main layouts — saves, errors, and delete confirmations (no inline green banners).
- Request admin access from profile pages; staff assign users; profile admins cannot remove each other; super admin approves admin removals.
- City, state, and country on artist, author, and label forms and public profile views.
Profile page fix
development-v2.2.0.14-alpha
Released 2026-09-29
Notification preferences appear once on the account profile, in their own section with a dedicated save action.
- Removed duplicate notification preference block from the profile information form.
Authors, engagement, analytics, and account menu
development-v2.2.0.13-alpha
Released 2026-09-29
Writers have their own catalog and manage CRUD; fans and roster get messages, notifications, and profile loves; staff and artists see Google Analytics dashboards; GA4 tracking runs site-wide on malanmusic.com.
- Authors catalog and /manage/authors — J.M. Blackwell is an author; custom domain jm-blackwell.com resolves to author profiles.
- Messages inbox and notifications center with unread badges; notification preferences on profile.
- Heart a profile to get notified when they post (database notifications).
- Analytics at /analytics — overall roster for staff, per artist/author/label for permitted roles; GA4 Data API when configured.
- Google tag G-99WM9CYNV6 on public, admin, and auth layouts via GA_MEASUREMENT_ID.
- Account dropdown in admin header and catalog nav (name, email, role, profile, preferences, log out).
Profile posts and cleaner public headers
development-v2.2.0.12-alpha
Released 2026-09-29
Artist and label profiles include a social-style posts column; header images display without a wash overlay; navigation uses Dashboard only for admin access.
- Verified users can post, comment, and like on artist and label profiles (custom domains included).
- Profile hero and catalog cards show uploaded header art without a gradient overlay.
- Two-column profile layout: main bio and links left, sticky posts feed right on large screens.
- Public and Breeze nav drop duplicate Manage link; Dashboard highlights while on manage routes.
- Admin sidebar groups roster tools under Roster & site.
Profile media on catalogs and custom domains
development-v2.2.0.11-alpha
Released 2026-09-29
Uploaded logos, photos, and header images appear on artist/label listings and profile pages, including when a custom domain serves the profile as home.
- Image upload fields with thumbnail, live preview, and validation errors on manage and profile forms.
- Reliable public-disk storage and host-relative /storage URLs so images work on jm-blackwell.com-style domains.
- Artist and label index cards show header strip and profile thumb via profile-listing-card.
- Custom-domain home shows branded nav (name + logo) and full profile hero.
- Product overview in docs/MALANMUSIC_PRODUCT.md; roadmap aligned with Future updates.
Idempotent database seeders
development-v2.2.0.10-alpha
Released 2026-09-29
Running php artisan db:seed again upserts roster data instead of duplicating rows; seeded test users stay email-verified.
- MusicRosterSeeder uses updateOrCreate on label and artist slugs.
- BopFlop subsidiary seeder updates showcase pivots without duplicate links.
- Role test users always get email_verified_at on seed.
- README documents safe re-run of db:seed.
Malan Music master label, showcase subsidiaries, and admin CRUD
development-v2.2.0.9-alpha
Released 2026-09-29
BopFlop.com is a subsidiary showcase site—not a label—with public pages and staff manage console CRUD; Malan Music is the master label in the roster.
- Malan Music seeded as the top-level label; The Backwoods Label is an imprint under it.
- Subsidiaries table and /showcases pages for artist spotlight websites.
- Staff manage CRUD at /manage/subsidiaries; BopFlop migrated off the labels catalog.
- Profile landings admin list includes artists, labels, and showcases.
Reliable label and artist saves in manage
development-v2.2.0.8-alpha
Released 2026-09-29
Roster forms accept everyday URL input and show validation errors when something blocks a save.
- Website and social URLs auto-prefix https:// when the scheme is omitted.
- Validation error summary on manage artist and label create/edit forms.
- Regression tests for superadmin label creation.
Staff landing tools and complete light/dark admin UI
development-v2.2.0.7-alpha
Released 2026-09-29
Superadmin and admin can edit the public site home and review profile landings; manage and profile forms use shared dark-mode components.
- Manage → Site home edits hero and feature cards stored in site_landings.
- Manage → Profile landings lists artists and labels with custom domains and edit links.
- Light/dark styling across roster management, profile settings, and shared form components.
- Google OAuth redirect built from APP_URL; README documents redirect_uri_mismatch fix.
Light and dark mode plus Tekys superadmin accounts
development-v2.2.0.6-alpha
Released 2026-09-29
Site-wide theme support with a persistent toggle, and role test users defined in config with an additional superadmin login.
- Tailwind dark mode (class strategy), theme-init script, and sun/moon toggle on public and admin layouts.
- Catalog, auth, profiles, and updates pages styled for light and dark.
- Role test emails @tekys.com and password live in config/malanmusic.php (not .env).
- Extra superadmin mtech801@gmail.com seeded via extra_superadmins.
Landing-aligned auth and local dev checklist
development-v2.2.0.5-alpha
Released 2026-09-29
Login and registration match the marketing site look; agents and docs enforce migrate, seed, storage link, and npm build.
- Guest auth layout uses the same gradient, header, and card styling as the landing page.
- Dark form variants for Google sign-in, inputs, and buttons on auth screens.
- README and MAKE_IT_SO require db:seed after fresh DB and npm run build after UI changes.
- Project rule malanmusic-session-basics for consistent local setup.
Release notes and roadmap pages
development-v2.2.0.4-alpha
Released 2026-09-25
Public What's new, Who's new, and Future updates pages driven from config, updated on every make it so.
- Routes /whats-new, /whos-new, and /future-updates with shared navigation.
- Config files for release notes, roster spotlights, and planned work.
- MAKE_IT_SO step 5 documents how to update content each release.
- Footer and catalog navigation link to the updates section.
Custom domains and rich profiles
development-v2.2.0.3-alpha
Released 2026-03-19
Artists and labels can point their own domain at MalanMusic and serve their public profile as the homepage.
- Custom domain mapping for artists and labels (e.g. jm-blackwell.com).
- Profile photos, header backgrounds, social links, and featured track or playlist.
- Fan accounts can edit the same presentation fields on their profile.
- Admin sidebar layout, site footer version, and local role test logins.
Auth, roster, and manage console
development-v2.2.0.2-alpha
Released 2026-03-18
Public artist and label catalogs with authenticated management for roster roles.
- Laravel Breeze registration, email verification, and Google sign-in.
- Resend mail integration and marketing landing page.
- Labels, artists, roster deals, and /manage CRUD for authorized roles.
- Role model: superadmin, admin, label, artist, and fan.
Laravel 13 foundation
development-v2.2.0.0-alpha
Released 2026-03-17
Fresh application stack for MalanMusic.
- Laravel 13, Vite, and Tailwind CSS 4.
- Versioned development branches and make-it-so release workflow.