374 Commits

Author SHA1 Message Date
Nick Beckley
8be690857e Phase 16H - Live Character Detection While Writing 2026-06-28 10:31:07 +01:00
Nick Beckley
507e16165e Phase 16G - Word Count Synchronisation Audit and Completion 2026-06-27 22:39:29 +01:00
Nick Beckley
0fc21041fc Phase 16E.2 - Runtime Update Reliability and Responsiveness 2026-06-27 22:34:35 +01:00
Nick Beckley
18f204460f Phase 16E.1 - Word Companion Runtime Performance Stabilisation 2026-06-27 22:18:24 +01:00
Nick Beckley
d442de5837 Phase 16F - Scene Word Count Sync and Writing Progress Update 2026-06-27 22:07:17 +01:00
Nick Beckley
85404b9c42 Phase 16C/16D/16E Fix - Correct Onboarding Wizard Step Order and Runtime Transition 2026-06-27 21:43:48 +01:00
Nick Beckley
908199c802 Phase 16D/16E Fix - Separate Structure Import from Character Creation 2026-06-27 21:29:12 +01:00
Nick Beckley
35eef02322 Phase 16E Fix - Office.js ContentControlCollection.items PropertyNotLoaded Error 2026-06-27 21:25:44 +01:00
Nick Beckley
f26cd48173 Phase 16E - Bound Document Runtime and Current Scene Detection 2026-06-27 21:10:20 +01:00
Nick Beckley
772a144d70 Phase 16D.3 - Final Character Discovery Polish 2026-06-27 20:52:02 +01:00
Nick Beckley
1ee77d953d Phase 16D.2 - Character Discovery Confidence and Selection Refinement 2026-06-27 20:27:44 +01:00
Nick Beckley
7bee51834b Phase 16D.1 - Refine Major Character Discovery 2026-06-27 20:16:42 +01:00
Nick Beckley
ac300a94c8 Phase 16D - Major Character Discovery During Manuscript Import 2026-06-27 20:08:19 +01:00
Nick Beckley
33e8f0857c Phase 16C - Word Companion First-Run Binding and Manuscript Import 2026-06-27 19:41:44 +01:00
Nick Beckley
ced6f4cd0e Phase 16B - Manuscript Binding and Linked Structure Foundation 2026-06-27 19:14:01 +01:00
Nick Beckley
3c48301732 Phase 16A - Base Identity Model Cleanup and Chapter/Scene Foundation 2026-06-27 18:59:31 +01:00
Nick Beckley
62bf231f65 Added new Word Companion specification document and moved old one to archive. 2026-06-27 16:16:31 +01:00
Nick Beckley
393fa884ca Fixed 2FA and login pages. 2026-06-26 19:47:25 +01:00
Nick Beckley
44d7253367 Changed 2FA page to input 6 characters and auto submit. 2026-06-26 19:32:55 +01:00
Nick Beckley
18a14bbd01 Public SEO pass. 2026-06-25 19:46:23 +01:00
Nick Beckley
b7865c8e54 Updated Terms and Privacy pages 2026-06-24 19:03:08 +01:00
Nick Beckley
aa188baa70 Fixed the home page hero was sitting above the open account dropdown in the stacking order, so clicks were landing on the hero instead of the menu. 2026-06-24 11:39:20 +01:00
Nick Beckley
19d9bc4bb1 mplemented the public navigation and SEO coverage pass. 2026-06-24 10:57:18 +01:00
Nick Beckley
bd5bf07906 mplemented the attached SEO/navigation polish. 2026-06-24 10:42:30 +01:00
Nick Beckley
c724f7b178 Help System SEO URL Slugs 2026-06-24 10:09:07 +01:00
Nick Beckley
6896629ed0 Phase 15C - Feature Requests: Layout Polish, Notifications and Public Roadmap Foundation 2026-06-23 21:51:10 +01:00
Nick Beckley
ac14776e45 Phase 15B - Feature Request Workflow, Filtering and Admin Productivity 2026-06-23 21:38:41 +01:00
Nick Beckley
955fcb9c0f Phase 15A - Feature Request System Foundation and User Workflow 2026-06-23 21:25:59 +01:00
Nick Beckley
43578df18a Fixed The Relationship Map was rendering the avatar placeholder correctly, but the data feeding the map did not include avatar image paths because RelationshipMap_GetByProject only returns basic character fields.
I updated [CoreServices.cs](C:/Source/PlotLine/PlotLine/Services/CoreServices.cs) so RelationshipMapService enriches map nodes from the normal character list, which already includes AvatarImagePath / AvatarThumbnailPath. Maggie Grant’s node detail should now use her avatar image instead of falling back to MG.
Verification: separate-output build passed with 0 warnings and 0 errors.
No database changes were required.
2026-06-23 21:05:45 +01:00
Nick Beckley
b5b353e80c Implemented the targeted Timeline performance pass and applied the SQL locally. 2026-06-23 20:38:58 +01:00
Nick Beckley
a3ce37c66c Converted all inline SQL to stored procedures. 2026-06-23 20:09:31 +01:00
Nick Beckley
d255407193 Implemented the Phase 14A follow-up fixes. 2026-06-23 19:47:30 +01:00
Nick Beckley
b460b38583 Implement character relationship and identity improvements 2026-06-22 21:39:45 +01:00
Nick Beckley
28cab2adf4 Implemented Phase 14A: Character Galleries & Avatar Cropping. 2026-06-22 21:23:33 +01:00
Nick Beckley
54fdc034ea Implemented the Projects listing redesign. 2026-06-22 20:58:20 +01:00
Nick Beckley
c9a9605cd2 Fixed hard delete 2026-06-22 20:44:42 +01:00
Nick Beckley
5f8ff0c0dd Implemented the PlotDirector export/import completeness pass. 2026-06-22 20:03:08 +01:00
Nick Beckley
882a96fd01 Merge branch 'planner' 2026-06-22 19:20:17 +01:00
Nick Beckley
710ca25468 The detached Field help: ? ? ? row has been removed from the Selected Block panel.
Restored inline field help beside:
Type
X
Y
Width
Height
Label override
Left plain, with no field help in Selected Block:
Location
Notes
The panel-level Selected block [?] help remains. I also verified the help path: HelpIconTagHelper uses HelpService.GetByContextKey, and HelpService caches parsed article metadata after first load.
2026-06-22 19:10:11 +01:00
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
b998760e96 Implemented the Floor Plans help pass.
What changed:
Added 45 new Floor Plans help articles under [FloorPlans](C:/Source/PlotLine/PlotLine/Help/Articles/FloorPlans), including the seven full guides requested plus field-level help for the contextual icons.
Wired contextual help-icon entries into:Floor Plans list page
Floor Plan editor header
Structure / Occupancy mode controls
floor, block, background, transitions and occupancy UI
transition-specific areas for stairs, ladders, hidden doors and secret passages

Verification:
Confirmed every Floor Plans help-icon key used in the views has a matching article.
Confirmed all 45 new articles have required help metadata.
dotnet build PlotLine.slnx passes with 0 warnings and 0 errors.
No database changes, no Floor Plan behaviour changes, no transition changes, and no editor redesign.
2026-06-22 16:24:42 +01:00
Nick Beckley
92ab8f3202 Done. The Selected Block editor now uses grid-style coordinate dropdowns in [Edit.cshtml (line 423)](C:/Source/PlotLine/PlotLine/Views/FloorPlans/Edit.cshtml:423).
What changed:
X is now a dropdown showing A, B, C, AA, etc., while still saving 0, 1, 2, etc.
Y is now a dropdown showing 1, 2, 3, etc., while still saving 0, 1, 2, etc.
Options are limited to valid positions for the active floor and current block size.
Dragging, manual dropdown changes, block resizing, and grid resizing all keep the controls synced through the existing block write/clamp path.
Verification: dotnet build PlotLine.slnx passes with 0 warnings and 0 errors. No database, rendering model, transition logic, or AJAX architecture changes.
2026-06-22 14:43:09 +01:00
Nick Beckley
238b8223fd Merged 2026-06-22 13:45:12 +01:00
Nick Beckley
7874740f42 Done. I updated [Edit.cshtml (line 200)](C:/Source/PlotLine/PlotLine/Views/FloorPlans/Edit.cshtml:200) so the Occupancy Warnings panel is hidden by default and only appears when the selected scene/floor has actual warning rows.
Also removed the “All scene occupants are placed.” message entirely, and filtered “Some occupants are on other floors.” out of the large panel so it can remain only as the compact contextual note near the plan.
Verification: dotnet build PlotLine.slnx passes with 0 warnings and 0 errors. No occupancy model, floor rendering, transition, AJAX, or database changes.
2026-06-22 13:42:48 +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
a943ac3da4 Implemented the targeted Scene Occupancy refinement pass. 2026-06-22 11:34:38 +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