{"id":"698b03c01c51d6df3b7b9f74","title":"2026 02 05","path":"how-to/committee/release-notes/2026-02-05","contentMarkdown":"# 05-Feb-2026 — CLI migration tool and album-index performance optimizations ([ref: #153](https://github.com/nbarrett/ngx-ramblers/issues/153), [#154](https://github.com/nbarrett/ngx-ramblers/issues/154))\n\n## [build 473](https://github.com/nbarrett/ngx-ramblers/actions/runs/21860135871) — [commit 39f61ab](https://github.com/nbarrett/ngx-ramblers/commit/39f61ab8e4e2818d65ecc6eef0f43f415a64dbe9)\n\n_____\n\n## Release Notes\n- Site Migration Tool: New CLI command to migrate content from legacy websites to NGX Ramblers\n- Scrapes old sites using jsdom/Turndown for HTML-to-markdown conversion\n- Reconciles pages and detects content gaps between old and new sites\n- Creates pages with text, events, and action-buttons rows\n- Interactive checkbox selection of changes to apply\n- Faster Photo Galleries: Album index pages load significantly faster\n- Single prefetch query replaces multiple individual API calls\n- Preview images found efficiently through depth-limited recursive search\n- Image Depth Control: New \"Max Depth\" setting in album indexes limits nested content levels\n- Draggable Image Height: Text row images can be resized by dragging in the editor\n- Image Overflow Fix: External images no longer overflow their card containers\n## Technical Changes\n- Create shared CMS client (`server/lib/shared/cms-client.ts`) for reuse across release-notes and migration\n- Add checkbox prompt to cli-prompt for multi-select operations\n- Implement migrate command with full apply logic and berkshire subcommand\n- Update NgxWalk model with groupEvent properties for walk data access\n- Add `maxPathSegments` field to `ContentPathMatch` interface for path depth filtering\n- Add `imageHeight` field to `PageContentColumn` interface and mongoose schema\n- Add Max Depth UI control in album-index site-edit component\n- Prefetch all descendant pages in single query at depth 0\n- Pass prefetched pages to recursive calls to eliminate N+1 query pattern\n- Enable 2-level preview image search depth for nested album structures\n- Filter pages by maxPathSegments after initial query\n- Skip site-edit component initialization when not in edit mode (prevents 50+ API calls)\n- Store pending pageContent for deferred initialization on edit mode activation\n- Add HeightResizer component to text row image editing\n- Add max-width: 100% to .card-img-top to constrain external image dimensions\n- Remove site-specific migration code to keep codebase generic","contentHtml":"<h1>05-Feb-2026 — CLI migration tool and album-index performance optimizations (<a href=\"https://github.com/nbarrett/ngx-ramblers/issues/153\">ref: #153</a>, <a href=\"https://github.com/nbarrett/ngx-ramblers/issues/154\">#154</a>)</h1>\n<h2><a href=\"https://github.com/nbarrett/ngx-ramblers/actions/runs/21860135871\">build 473</a> — <a href=\"https://github.com/nbarrett/ngx-ramblers/commit/39f61ab8e4e2818d65ecc6eef0f43f415a64dbe9\">commit 39f61ab</a></h2>\n<hr>\n<h2>Release Notes</h2>\n<ul>\n<li>Site Migration Tool: New CLI command to migrate content from legacy websites to NGX Ramblers</li>\n<li>Scrapes old sites using jsdom/Turndown for HTML-to-markdown conversion</li>\n<li>Reconciles pages and detects content gaps between old and new sites</li>\n<li>Creates pages with text, events, and action-buttons rows</li>\n<li>Interactive checkbox selection of changes to apply</li>\n<li>Faster Photo Galleries: Album index pages load significantly faster</li>\n<li>Single prefetch query replaces multiple individual API calls</li>\n<li>Preview images found efficiently through depth-limited recursive search</li>\n<li>Image Depth Control: New &quot;Max Depth&quot; setting in album indexes limits nested content levels</li>\n<li>Draggable Image Height: Text row images can be resized by dragging in the editor</li>\n<li>Image Overflow Fix: External images no longer overflow their card containers</li>\n</ul>\n<h2>Technical Changes</h2>\n<ul>\n<li>Create shared CMS client (<code>server/lib/shared/cms-client.ts</code>) for reuse across release-notes and migration</li>\n<li>Add checkbox prompt to cli-prompt for multi-select operations</li>\n<li>Implement migrate command with full apply logic and berkshire subcommand</li>\n<li>Update NgxWalk model with groupEvent properties for walk data access</li>\n<li>Add <code>maxPathSegments</code> field to <code>ContentPathMatch</code> interface for path depth filtering</li>\n<li>Add <code>imageHeight</code> field to <code>PageContentColumn</code> interface and mongoose schema</li>\n<li>Add Max Depth UI control in album-index site-edit component</li>\n<li>Prefetch all descendant pages in single query at depth 0</li>\n<li>Pass prefetched pages to recursive calls to eliminate N+1 query pattern</li>\n<li>Enable 2-level preview image search depth for nested album structures</li>\n<li>Filter pages by maxPathSegments after initial query</li>\n<li>Skip site-edit component initialization when not in edit mode (prevents 50+ API calls)</li>\n<li>Store pending pageContent for deferred initialization on edit mode activation</li>\n<li>Add HeightResizer component to text row image editing</li>\n<li>Add max-width: 100% to .card-img-top to constrain external image dimensions</li>\n<li>Remove site-specific migration code to keep codebase generic</li>\n</ul>\n"}