78 Commits

Author SHA1 Message Date
Nick Beckley
350b8ba9ab Implemented the focused Floor Plans performance pass.
Measured findings:
Authenticated Calendar House editor load measured around 600 ms locally.
SQL calls were generally around 50-65 ms after warm-up.
The main recent bloat was the Help UI wiring: the editor had 615 help icons and about 1.5 MB of HTML.
Optimisations made:
Reduced repeated hidden help icons in [Edit.cshtml (line 409)](C:/Source/PlotLine/PlotLine/Views/FloorPlans/Edit.cshtml:409), especially per-block editors and repeated transition edit modals.
Help icons now measure at 107, with HTML reduced to about 1.26 MB.
Optimised occupancy warning calculation in [CoreServices.cs (line 7883)](C:/Source/PlotLine/PlotLine/Services/CoreServices.cs:7883) by grouping occupancy rows once instead of repeatedly scanning them per scene.
Added new index migration [083_FloorPlanEditorOccupancyIndexes.sql](C:/Source/PlotLine/PlotLine/Sql/083_FloorPlanEditorOccupancyIndexes.sql) for Floor Plan scene/occupancy lookups. Applied locally.
Verified:
Structure/Occupancy mode still works.
Previous/Next scene changes the selected scene.
Tokens and transitions still render.
Help icons still resolve to articles.
dotnet build PlotLine.slnx passes with 0 warnings and 0 errors.
No Floor Plans behaviour, transition logic, occupancy data model, or feature architecture changes.
2026-06-22 16:58:20 +01:00
Nick Beckley
f4a455f70b Implemented the Floor Plans Occupancy scene dropdown fix.
Changed:
[CoreModels.cs (line 308)](C:/Source/PlotLine/PlotLine/Models/CoreModels.cs:308) now maps book/chapter metadata onto Scene for ordering/labels.
[CoreServices.cs (line 7818)](C:/Source/PlotLine/PlotLine/Services/CoreServices.cs:7818) now orders occupancy scenes by book, chapter, scene, title and labels them like:
Book 1, Chapter 1.00, Scene 1.00: Arrival at the House
Added and applied [082_FloorPlanOccupancySceneOrdering.sql](C:/Source/PlotLine/PlotLine/Sql/082_FloorPlanOccupancySceneOrdering.sql) to update Scene_ListByFloorPlan.
Verified:
Database query for The Calendar House now returns Chapter 1 scenes in order, then Chapter 2 scenes, etc.
dotnet build PlotLine.slnx passes with 0 warnings and 0 errors.
No schema changes, no occupancy model changes, no floor plan rendering changes, and no transition changes. Previous/Next should follow the corrected order because it uses the same ordered scene list in the dropdown.
2026-06-22 13:24:46 +01:00
Nick Beckley
13c97db5a0 Implemented the urgent stability/performance pass.
What I fixed:
Removed the warning-calculation N+1 queries. Occupancy warnings now use one floor-plan participant query instead of per-scene character/asset lookups.
Added SceneFloorPlanParticipant_ListByFloorPlan to the existing migration script with SET ANSI_NULLS ON and SET QUOTED_IDENTIFIER ON.
Reapplied the migration locally.
Confirmed FloorPlanBlock_Save, FloorPlan_GetEditor, and the new participant proc have quoted identifiers enabled.
Reduced drag/resize freeze risk by throttling expensive geometry recalculation to animation frames instead of every pointer event.
Added a final geometry refresh on pointer-up/cancel before autosave.
Improved autosave failure visibility by showing the real error in the editor, not just leaving status stuck.
Made Occupancy mode view/staging only:Blocks no longer start drag/resize in Occupancy mode.
Resize handles are hidden.
Structural toolbox is hidden.
Plan canvas expands to use the freed width.
Structure mode restores normal editing.

Verification:
dotnet build PlotLine.slnx passes with 0 warnings and 0 errors.
Non-destructive SQL smoke test of FloorPlanBlock_Save against the Lounge block passed inside a transaction and rolled back.
Confirmed the Lounge block stayed unchanged after the rollback.
Reapplied 081_FloorPlanFloorDescriptionAndOccupancyWarnings.sql successfully.
Files changed:
[Repositories.cs](C:/Source/PlotLine/PlotLine/Data/Repositories.cs)
[CoreModels.cs](C:/Source/PlotLine/PlotLine/Models/CoreModels.cs)
[CoreServices.cs](C:/Source/PlotLine/PlotLine/Services/CoreServices.cs)
[081 SQL migration](C:/Source/PlotLine/PlotLine/Sql/081_FloorPlanFloorDescriptionAndOccupancyWarnings.sql)
[Edit.cshtml](C:/Source/PlotLine/PlotLine/Views/FloorPlans/Edit.cshtml)
[site.css](C:/Source/PlotLine/PlotLine/wwwroot/css/site.css)
[site.min.css](C:/Source/PlotLine/PlotLine/wwwroot/css/site.min.css)
Manual browser QA still needed for the exact drag/add/reload flow, but the code path and SQL save path are now stabilized.
2026-06-22 12:06:53 +01:00
Nick Beckley
7ad993aae3 Implemented the cleanup/refinement pass.
What changed:
Removed the standalone floor-plan details panel under the page title.
Added current-floor Description and editable Root Location into the Floors toolbox tab.
Added live computed Occupancy Warnings in Occupancy mode.
Preserved the existing AJAX workspace flow, including active floor/toolbox tab/mode/selected occupancy scene through refreshes.
Added floor description support via a new migration:
[081_FloorPlanFloorDescriptionAndOccupancyWarnings.sql](C:/Source/PlotLine/PlotLine/Sql/081_FloorPlanFloorDescriptionAndOccupancyWarnings.sql)
Database changes:
Added nullable FloorPlanFloors.Description.
Updated active stored procedures:FloorPlan_GetEditor
FloorPlanFloor_Get
FloorPlanFloor_ListByPlan
FloorPlanFloor_Save

Warnings are not persisted. No warning tables were added.
Files changed include:
[Edit.cshtml](C:/Source/PlotLine/PlotLine/Views/FloorPlans/Edit.cshtml)
[CoreServices.cs](C:/Source/PlotLine/PlotLine/Services/CoreServices.cs)
[Repositories.cs](C:/Source/PlotLine/PlotLine/Data/Repositories.cs)
[CoreModels.cs](C:/Source/PlotLine/PlotLine/Models/CoreModels.cs)
[CoreViewModels.cs](C:/Source/PlotLine/PlotLine/ViewModels/CoreViewModels.cs)
[site.css](C:/Source/PlotLine/PlotLine/wwwroot/css/site.css)
[site.min.css](C:/Source/PlotLine/PlotLine/wwwroot/css/site.min.css)
Verification:
Applied the new migration locally.
Confirmed FloorPlanFloors.Description exists.
Confirmed scene/occupancy source data exists for The Calendar House.
dotnet build PlotLine.slnx passes with 0 warnings and 0 errors.
Manual QA still needed in the browser: edit floor description/root location, switch Structure/Occupancy mode, step scenes, and confirm warnings/tokens update visually without jumps.
2026-06-22 11:56:01 +01:00
Nick Beckley
cea82a922f Implemented Phase 1 Scene Occupancy.
What Changed
Added scene-owned occupancy data:Scenes.FloorPlanID
Scenes.InitialFloorPlanFloorID
new SceneFloorPlanOccupancy table

Added Occupancy section to the Scene Inspector with AJAX save/refresh.
Added Floor Plan editor Structure / Occupancy mode.
Occupancy mode shows linked scenes, previous/next scene controls, and character/asset tokens inside assigned locations.
Character tokens use image thumbnail, then initials fallback. Asset tokens do the same, smaller.
No Features, no new floor-plan architecture, no transition changes.
Files Changed
[CoreModels.cs](C:/Source/PlotLine/PlotLine/Models/CoreModels.cs)
[CoreViewModels.cs](C:/Source/PlotLine/PlotLine/ViewModels/CoreViewModels.cs)
[Repositories.cs](C:/Source/PlotLine/PlotLine/Data/Repositories.cs)
[CoreServices.cs](C:/Source/PlotLine/PlotLine/Services/CoreServices.cs)
[ScenesController.cs](C:/Source/PlotLine/PlotLine/Controllers/ScenesController.cs)
[Program.cs](C:/Source/PlotLine/PlotLine/Program.cs)
[Edit.cshtml](C:/Source/PlotLine/PlotLine/Views/FloorPlans/Edit.cshtml)
[_SceneInspector.cshtml](C:/Source/PlotLine/PlotLine/Views/Scenes/_SceneInspector.cshtml)
[_SceneOccupancy.cshtml](C:/Source/PlotLine/PlotLine/Views/Scenes/_SceneOccupancy.cshtml)
[site.js](C:/Source/PlotLine/PlotLine/wwwroot/js/site.js)
[site.css](C:/Source/PlotLine/PlotLine/wwwroot/css/site.css)
minified CSS/JS updated.
Database
Added new migration only: [080_SceneFloorPlanOccupancy.sql](C:/Source/PlotLine/PlotLine/Sql/080_SceneFloorPlanOccupancy.sql)
Applied locally.
Added constraints/FKs and filtered unique indexes for one character/asset occupancy row per scene.
Stored Procedures Added/Updated
Scene_Save
Scene_Get
Scene_FloorPlanLink_Save
Scene_ListByFloorPlan
FloorPlanFloor_ListByPlan
FloorPlanBlock_ListByPlan
SceneFloorPlanOccupancy_ListByScene
SceneFloorPlanOccupancy_ListByFloorPlan
SceneFloorPlanOccupancy_Save
Test Data
Permanent Calendar House seed data added:
Book: The Calendar House
Chapters 1-3
14 scenes
Characters: Ellie, Grant, Stephen, Housekeeper, Gardener
Assets: Brass Key, Journal, Candle, Map, Letter
45 occupancy assignments
Verification
dotnet build PlotLine.slnx passes with 0 warnings/errors.
Migration applied locally.
Local app boots and returns HTTP 200.
DB checks confirm 14 linked scenes and 45 occupancy rows.
Manual browser click-through of the authenticated UI still needs a human pass for the AJAX controls and visual token placement.
2026-06-22 10:45:30 +01:00
Nick Beckley
34a8d94cb4 Implemented the Visual Identity infrastructure pass.
Changed
Added image fields for Characters and Story Assets in models, view models, repositories, services, and save flows.
Added reusable avatar/initials rendering via [AvatarHelper.cs](C:/Source/PlotLine/PlotLine/Services/AvatarHelper.cs) and [_Avatar.cshtml](C:/Source/PlotLine/PlotLine/Views/Shared/_Avatar.cshtml).
Added upload/remove processing through existing upload storage in [VisualIdentityImageService.cs](C:/Source/PlotLine/PlotLine/Services/VisualIdentityImageService.cs).
Updated Character and Story Asset list/detail/edit views with thumbnails, initials fallback, upload, replace, and remove controls.
Added styling in [site.css](C:/Source/PlotLine/PlotLine/wwwroot/css/site.css) and refreshed site.min.css.
Database
Added new migration [079_VisualIdentityCharacterAssetImages.sql](C:/Source/PlotLine/PlotLine/Sql/079_VisualIdentityCharacterAssetImages.sql).
Adds nullable ImagePath and ThumbnailPath to Characters and StoryAssets.
Applied locally and confirmed the columns exist.
Stored Procedures
Updated active procedure definitions only:
Character_ListByProject
Character_Get
Character_Save
Character_UpdateImage
StoryAsset_ListByProject
StoryAsset_Get
StoryAsset_Save
StoryAsset_UpdateImage
2026-06-22 10:10:39 +01:00
Nick Beckley
89c381e6bc Optimise floor plan editor and add reciprocal stairs 2026-06-21 21:32:05 +01:00
Nick Beckley
f57913014c Implemented the next Floor Plans enhancement pass. 2026-06-21 21:18:14 +01:00
Nick Beckley
9fc4374df3 Implemented the floor-level ordering pass using the existing integer SortOrder as the user-facing Level. 2026-06-21 20:49:17 +01:00
Nick Beckley
ee504d878f Save 2026-06-21 12:01:48 +01:00
Nick Beckley
18858f3fba Implemented the Floor Plans multi-block room and transition phase. 2026-06-20 21:41:40 +01:00
Nick Beckley
e455018d73 Implemented the Floor Plans background-image phase. 2026-06-20 21:06:53 +01:00
Nick Beckley
b2ac7b5eeb Implemented the Floor Plans UX/data-model refinement pass. 2026-06-20 20:32:59 +01:00
Nick Beckley
030a4a10da Implemented the Floor Plans UX/data-model refinement pass. 2026-06-20 20:13:23 +01:00
Nick Beckley
601afa8806 Implemented the first-pass Location Floor Plans foundation. 2026-06-20 18:44:58 +01:00
Nick Beckley
e5ed45897a Implemented the Timeline C3 refinement. 2026-06-20 16:36:18 +01:00
Nick Beckley
7363d0c128 Scene inspector character attribute fix 2026-06-19 14:08:46 +01:00
Nick Beckley
dca5b0a847 Implement a small display fix caused by Phase 13A book subtitles. 2026-06-15 19:42:06 +01:00
Nick Beckley
8a4b016526 Phase 13B: Book Cover Upload and Processing. 2026-06-15 15:17:31 +01:00
Nick Beckley
4e71010814 Phase 13A: Book Metadata Backend. 2026-06-15 14:53:19 +01:00
Nick Beckley
738b9f496d Phase 12F: Continuity Warning Management. 2026-06-14 20:34:29 +01:00
Nick Beckley
ffcbe99028 Phase 10K chapter create/link foundation. 2026-06-14 10:04:41 +01:00
Nick Beckley
f01232de49 Phase 10J unmatched scene actions do not appear 2026-06-14 09:06:09 +01:00
Nick Beckley
a9aae3fbf9 Phase 10J: Word Companion Scene Create / Link 2026-06-14 09:02:24 +01:00
Nick Beckley
6dd46c2632 Phase 10H.2: Fix Word Companion Scene Links to Use Real PlotDirector Scene Data 2026-06-13 21:20:43 +01:00
Nick Beckley
825a66f66a Phase 10H.1: Fix Word Companion Scene Links Empty Selection Saving 2026-06-13 21:16:07 +01:00
Nick Beckley
b813b187d7 Phase 10F: Sync Current Scene Progress 2026-06-13 20:10:54 +01:00
Nick Beckley
7c9e9b0b6f Phase 10E.2: Fix Word Companion Resolve Scene Matching 2026-06-13 20:03:30 +01:00
Nick Beckley
d2ae46209b Phase 10A API foundation only 2026-06-13 15:55:25 +01:00
Nick Beckley
e66b43064a Phase 9B is implemented: database foundation only, no schedule generation or UI. 2026-06-12 21:03:22 +01:00
Nick Beckley
6dee173c5c Phase 7D User Delete 2026-06-12 20:11:52 +01:00
Nick Beckley
36ae1f95df Phase 7A Hard Delete 2026-06-12 11:46:31 +01:00
Nick Beckley
fb5352ab8f Phase 6A Plot Lines 2026-06-11 19:41:03 +01:00
Nick Beckley
77d5623e51 Writer Workspace changes. 2026-06-09 21:06:45 +01:00
Nick Beckley
a460058c2c Rename Phase 1C: Backup/import format rename. 2026-06-08 15:23:15 +01:00
Nick Beckley
3f912d63e2 Rename Phase 1B: Public rebrand from PlotWeaver to PlotDirector. 2026-06-08 15:19:52 +01:00
Nick Beckley
55973d3e07 Phase 5J - Subscription Level Pricing 2026-06-07 18:32:31 +01:00
Nick Beckley
e16a5cdb52 Added Production Stripe Price IDs 2026-06-07 18:05:11 +01:00
Nick Beckley
1e03241d4e Phase 5I – Stripe Integration Completed 2026-06-07 14:59:41 +01:00
Nick Beckley
10fe153d6c Phase 5H Subscription Management 2026-06-07 14:06:14 +01:00
Nick Beckley
9d0f588972 Phase 5G – Project Export and Archiving 2026-06-07 12:20:36 +01:00
Nick Beckley
1c19edda5c Phase 5F – Storage Management and Quota Enforcement 2026-06-07 11:49:50 +01:00
Nick Beckley
1f3f68e6f3 Phase 5E Audit Activity 2026-06-07 11:05:40 +01:00
Nick Beckley
9824b364b7 Phase 5D Collaboration Foundation 2026-06-07 10:47:27 +01:00
Nick Beckley
b94ca66918 Phase 5C Subscription Limit Usage 2026-06-07 10:25:03 +01:00
Nick Beckley
49f239b301 Phase 5B Project Subscription Infrastructure 2026-06-07 10:13:16 +01:00
Nick Beckley
90b2212890 Phase 5A Project User access 2026-06-07 09:54:47 +01:00
Nick Beckley
b3a3c045dc Phase 4F AuthService Manage Account 2026-06-06 20:17:16 +01:00
Nick Beckley
6895009223 Phase 4E AuthService 2FA 2026-06-06 20:04:19 +01:00
Nick Beckley
2f4590b681 Phase 4D AuthService and Email Queue 2026-06-06 19:46:02 +01:00