Skip to content

Migration Review -- Master Summary

Last Updated: 2026-02-27 Project: Progress Credit Union -- Umbraco v8 to v17 Migration V8 Source: psCreditUnion/Progress.Web/ + SQL Server progresscu.ie V17 Target: dbl.Progress/src/www/ + Umbraco 17 at psv17.double.pt Migration Tool: double-migration-tool/

Shared codebase note: This codebase is shared across multiple credit union client databases. Items with zero content in progresscu.ie may be actively used in other client databases. All datatypes and element types are migrated. Cleanup is performed per-destination-DB only after cross-validating all clients.


Current Status

Area Status
Page Templates DONE -- 45 of 48 migrated; 3 confirmed obsolete
Component Views DONE -- 146 total (121 blockgrid + 7 blocklist + 18 SiteLayout)
Bootstrap 5 Upgrade DONE -- 1,142 CSS replacements across 159 files
Migration Tool Fixes DONE -- duplication eliminated (commits 09935d2, 164069f, 76a17cf)
Calculator Localization DONE -- 6 partials with IDictionaryService
Color Picker / Double-Hash DONE -- fixed across 20+ files
MediaPicker3 Single-Pick DONE -- fixed across 20+ files
DropDown.Flexible JSON DONE -- wrapped across 20+ files
RTE TipTap Config DONE -- toolbar, extensions, HTML preservation
Obsolete API Calls DONE -- .Children/.Parent properties converted to methods
API Keys Externalized DONE -- moved to appsettings.json
Orphan Element Views DONE -- 4 removed (commit 81d4ca6)

Overall migration completeness: ~95%


Completed Phases

Phase Scope Status
Phase 1 -- P0 Fixes Data protection files, camelCase duplicates, DT 1055 DONE
Phase 2 -- MkDocs Documentation site setup DONE
Phase 3 -- P1 Fixes Page templates, component views, calculator localization, video slides, orphan audit DONE
Phase 4 -- Bootstrap 5 Bootstrap 4.4.1 to 5.3.3 upgrade (package, templates, layouts, components, partials, JS, CSS) DONE
Phase 5 -- P2/P3 LoanBoxes, API keys, obsolete API calls DONE

Key Decisions Made

  1. Per-datatype element types retained. Report 11 confirmed zero identical layouts across datatypes. Layout/area wrapper deduplication is impossible without breaking editor permissions. This architecture is correct by design.

  2. Settings deduplication deferred. 29 potential savings, but GUID remapping risk across all client databases outweighs the benefit. No functional impact from keeping them separate.

  3. 4-level BlockGrid hierarchy retained. Row Config, Layout, Area Wrapper, Content. Area Wrappers preserve v8 cell-level styles. Mitigated via Content Templates and Quick Add backoffice extension (documented in Report 13).

  4. Bootstrap 5.3.3 chosen. Latest stable release. All data-* attributes converted to data-bs-*, class renames applied across all views and JS files.

  5. 3 page templates declared obsolete: TrustpilotWidget, LoanBoxContactControl, NewsCategoryItems. These were v8-specific widgets with no content in any client database.

  6. Flat directory structure retained for blockgrid/Components/. Subdirectory organization (Report 08 Option A) was deferred -- the prefix-based naming convention (grid_element_*, grid_builtin_*, etc.) provides sufficient organization.


Remaining Work

P2 -- Medium (non-blocking for go-live)

# Item Detail
1 Calculator slider UI Number inputs instead of jQuery UI sliders. Hidden fields and data attributes are in place.
2 LoanBoxes performance DescendantsOrSelf() traverses content tree on every render. Should use ISiteSettingsService.
3 Calculator form validation Basic HTML5 only. Needs jQuery validation with localization support.

P3 -- Low (post-launch cleanup)

# Item Detail
4 Test DataType 2236 cleanup Not checked across client databases. Candidate for removal if unused everywhere.
5 Content usage audit Detailed content-per-element-type breakdown (Report 04 Section 7).
6 Settings element type deduplication 29 savings. Deferred due to GUID remapping risk.

Component Readiness

Component Status Notes
News 100% All display modes, culture/visibility filters, property casing verified.
Grid Layouts 100% Property whitelist confirmed complete. 11 v8 files consolidated to 3.
Testimonials 100% Slider layout, image suppression, read-more link, default mode all fixed.
LoanBoxes 100% All 4 modes (Tabs, Boxes, FlipCards, Accordion). P2 performance item deferred.
Calculators 95% All types implemented, localization done. P2 slider UI and form validation remain.
Data Protection 100% All 5 components working. Duplicate camelCase views removed.
Video Slides 100% YouTube, Vimeo, and internal video slides created.
Announcement/Spotlight 100% Scroll and spotlight grid verified working.

Key Numbers

Metric Value
V8 views (total) 257
V17 views (migrated) ~246 (~96%)
Page templates 45 of 48 (3 obsolete)
Component views 146 (121 blockgrid + 7 blocklist + 18 SiteLayout)
V8 grid datatypes 14
V17 BlockGrid datatypes 13 (one v8 DT had no doc type)
V17 element types (after fresh migration) ~430 (~25 duplicates eliminated)
Element types in-use (in content) 164
Element types configured (no content) 217
Element types orphaned 74 (30 infrastructure + 44 content)
Migration tool fix commits 3 (09935d2, 164069f, 76a17cf)
Bootstrap 5 commits 5 (643174b, 4cfa267, 7cd8ee8, f7f697c, 08e9a5d)
Bootstrap CSS replacements 1,142 across 159 files
Content nodes in v17 115
Nodes with BlockGrid data 76
Duplicate view pairs 0 (all resolved)
Case sensitivity issues 0 (all resolved)
P0/P1 issues ALL RESOLVED
P2 items remaining 3
P3 items remaining 3

4-Level BlockGrid Hierarchy

The v17 BlockGrid uses a strict 4-level nesting hierarchy:

Row Config -> Layout -> Area Wrapper -> Content

  • Layout AllowAtRoot is set to false, enforcing that editors must start with a Row Config.
  • Frontend rendering (BootstrapGrid.cshtml) handles all 4 levels. No changes needed.
  • Content migration (GridLayoutToBlockGridMigrator.cs) creates proper 4-level nesting. Existing migrated content is correct.

Why 4 Levels Are Necessary

Area Wrappers preserve v8 cell-level styles (background color, padding, margins, etc.) that have no other home in the BlockGrid model. The Row Config level provides page-level section configuration (full-width breakout, container behavior). Both are required for feature parity with v8.

Backoffice UX Mitigations

The 4-level hierarchy approximately doubles editor clicks. Three mitigations are documented:

  1. Content Templates (lowest effort) -- pre-populated page blueprints that eliminate hierarchy setup.
  2. Quick Add backoffice extension -- toolbar button offering presets like "Add Full Width Row" in one click.
  3. Auto-insert single-choice levels -- skip the catalogue modal when only one option exists (5 of 14 datatypes).

Report Index

Report File Topic
00 00-SUMMARY.md This summary
01 01-views-migration-audit.md V8 to v17 views comparison
02 02-duplicate-views-analysis.md Duplicate view resolution
03 03-v8-grid-baseline.md Immutable v8 reference
04 04-v17-element-type-audit.md 455 element types audit
05 05-grid-deduplication-analysis.md Deduplication analysis and decisions
06 06-view-element-crossref.md View/element type cross-reference
07 07-deep-dive-analysis.md Component deep-dive analysis
08 08-fix-plan-frontend.md Frontend naming fix plan
09 09-fix-plan-doctypes.md DocType/DataType fix plan
10 10-fix-plan-logic.md Component logic fix plan
11 11-grid-dedup-deep-investigation.md Grid dedup investigation (zero identical layouts confirmed)
12 12-grid-architecture-explained.md Grid architecture documentation
13 13-grid-migration-visual-plan.md Content migration and UX mitigations

Supporting Data Files

File Purpose
_v17-api-results.json Full API results (element types, doc types, tree)
_blockgrid-configs.json All 13 BlockGrid data type configurations
_content-usage.json Content node analysis -- element type usage counts
_element-type-status.json Classified: in-use / configured / orphaned
Migration documentation by Double for Progress Credit Union