{"id":"6983e9f1fdf510c3b20be028","title":"2026 02 03 Issue 147 Manual","path":"how-to/committee/release-notes/2026-02-03-issue-147-manual","contentMarkdown":"# 03-Feb-2026 — add external album import from Flickr [ref: #147](https://github.com/nbarrett/ngx-ramblers/issues/147)\n\n## [build 459](https://github.com/nbarrett/ngx-ramblers/actions/runs/21641819798) — [commit 7333a44](https://github.com/nbarrett/ngx-ramblers/commit/7333a4400b0742a1bb3793c4b22219605ce53b0d)\n\n_____\n\n## Overview\n\nThis release introduces two major features: **Flickr Album Import** for bringing external photo albums into the platform, and significant **Environment Setup Enhancements** for database-driven configuration. It also includes numerous code quality improvements and developer experience enhancements.\n\n---\n\n# User Guide\n\n## New Features\n\n### 1. Import Flickr Albums\n\nYou can now import photo albums directly from Flickr without copying images to S3. Images remain hosted on Flickr while the album is managed within the platform.\n\n#### How to Access\nNavigate to **Admin > System Settings > Image Migration > Import from External Sources**\n\n#### Single Album Import\n1. Select **Single Album** mode\n2. Paste a Flickr album URL (e.g., `https://www.flickr.com/photos/username/albums/12345`)\n3. Enter a target path for the new page (e.g., `gallery/2024/summer-walk`)\n4. Optionally customise the album title and subtitle\n5. Click **Import Album**\n6. The system will:\n   - Fetch all photos from the Flickr album\n   - Extract photo titles and dates\n   - Create a new album page at your specified path\n\n#### Bulk Import (Multiple Albums)\n1. Select **Bulk Import** mode\n2. Enter a Flickr user ID or username\n3. The system will fetch and display all albums for that user\n4. Select the albums you wish to import using checkboxes\n5. Set a base path (e.g., `gallery`) - albums will be created at `{base-path}/{album-name}`\n6. Review the generated paths (you can modify them before import)\n7. Click **Import Selected Albums**\n8. Monitor progress in real-time as each album is imported\n\n#### Album Splitting\nFor large albums with photos from different events, you can split them:\n1. Enable **Split by Photo Title**\n2. The system groups photos by their title patterns\n3. Preview how photos will be split into separate albums\n4. Choose which groups to include\n5. Each group becomes its own album page\n\n#### What Gets Imported\n- Album title and description from Flickr\n- All photo URLs (images remain on Flickr)\n- Photo titles (displayed when \"Show Titles\" is enabled in grid view)\n- Photo dates (for chronological ordering)\n- Cover photo for album previews\n\n#### Template Support\nYou can use an existing album page as a template:\n1. Enable **Use Template**\n2. Enter the path of an existing album page\n3. The new album(s) will inherit the layout and grid settings from the template\n\n---\n\n### 2. Index Row Auto Title\n\nIndex rows now support automatic title generation from the page URL.\n\n#### How It Works\n- **Auto Title enabled (default)**: The index row automatically displays a title derived from the page URL/subtitle\n- **Auto Title disabled**: You can enter custom markdown content for the title area\n\n#### How to Use\n1. Edit any page with an Index row\n2. Find the **Auto Title** checkbox in the Index row settings\n3. When enabled, the title updates automatically based on the page path\n4. When disabled, a markdown editor appears for custom title content\n\nThis is useful for:\n- Consistent titles across similar pages\n- Quick setup of new index pages\n- Override capability when you need a custom title\n\n---\n\n### 3. Improved CLI Tool\n\nThe command-line interface has been significantly enhanced for local development.\n\n#### Starting the Application Locally\n```bash\n# Development mode (with hot reload)\nngx-cli local dev staging\n\n# Production mode (build then run)\nngx-cli local prod staging\n```\n\n#### Available Environments\n```bash\n# List all configured environments\nngx-cli local list\n```\n\nThe CLI will:\n- Check port availability before starting\n- Load secrets from the appropriate environment file\n- Configure Chrome/Chromedriver for scraping features\n- Show real-time logs from both frontend and backend\n\n#### Log Files\nUse the `--log-dir` flag to save logs:\n```bash\nngx-cli local dev staging --log-dir ./logs --log-timestamp\n```\n\n---\n\n### 4. Environment Configuration from Database\n\nEnvironment configuration is now stored in the database rather than file-based configs. This provides:\n\n- **Centralised Configuration**: All environment settings in one place\n- **Real-time Updates**: Changes take effect without redeployment\n- **Better Security**: Sensitive configuration stored in database, not files\n\nThe system will automatically use database configuration, with file-based fallback only as a last resort (you'll be prompted before this happens).\n\n---\n\n## Changes to Existing Features\n\n### Album Grid View\n- Photo titles now display correctly when \"Show Titles\" is enabled\n- Photo dates are stored and can be used for sorting\n\n### Template Selector\n- New template selector component for reusing page layouts\n- Available when creating albums from external sources\n\n---\n\n# Technical Changes\n\n## GitHub Issue #147: Flickr Album Import - Completion Status\n\n### Completed Requirements\n\n| Requirement | Status |\n|------------|--------|\n| New \"Import from External Sources\" tab | ✅ Complete |\n| Single album import with URL input | ✅ Complete |\n| Bulk import from user albums | ✅ Complete |\n| Multi-select album interface | ✅ Complete |\n| Auto-generated paths from album names | ✅ Complete |\n| PageContent creation with correct structure | ✅ Complete |\n| ContentMetadata with Flickr URLs | ✅ Complete |\n| Photo title extraction (text field) | ✅ Complete |\n| Photo date extraction (date field) | ✅ Complete |\n| Real-time progress via WebSocket | ✅ Complete |\n| Error handling for invalid URLs | ✅ Complete |\n| Album splitting by photo title | ✅ Complete |\n| Template-based album creation | ✅ Complete |\n\n### Pending Testing\n- Albums display correctly in grid, gallery, and carousel views\n- Photo titles display when `showTitles` is enabled\n\n---\n\n## GitHub Issue #146: Environment Setup - Changes in This Release\n\n### Completed in This Release\n\n| Enhancement | Status |\n|------------|--------|\n| Database-driven environment configuration | ✅ Complete |\n| CLI database connection with explicit connect | ✅ Complete |\n| Fallback prompt before using file-based config | ✅ Complete |\n| Environment variable logging on CLI startup | ✅ Complete |\n| Standardised debug logging with `envConfig.logNamespace()` | ✅ Complete |\n\n---\n\n## Bonus Features (Outside Original Scope)\n\n### 1. External Album Import Framework\n- Extensible provider architecture (`ExternalAlbumProvider` interface)\n- Support for multiple sources (Flickr implemented, Google Photos/Instagram ready)\n- Album summary and metadata interfaces for any external source\n\n### 2. Album Splitting Feature\n- Split large albums by photo title patterns\n- Preview split results before importing\n- Include/exclude specific groups\n\n### 3. Template-Based Album Creation\n- Use existing album pages as templates\n- Inherit layout, grid options, and styling\n- Template selector component for easy selection\n\n### 4. Index Row Auto Title\n- Automatic title generation from page URL\n- Toggle between auto and manual markdown entry\n- Defaults to enabled for new index rows\n\n### 5. Enhanced CLI Local Development\n- Port availability checking before starting servers\n- Chrome/Chromedriver validation and configuration\n- Log file output with timestamps\n- Clean process shutdown handling\n\n### 6. Real-Time Import Progress\n- WebSocket-based progress updates\n- Stage-by-stage progress reporting\n- Activity logging during bulk imports\n\n### 7. Code Quality Improvements\n- Replaced all `Array<T>` with `T[]` syntax\n- Standardised debug logger creation with `envConfig.logNamespace()`\n- Cached environment variable validation (log once, not repeatedly)\n- Explicit database connection in CLI commands\n\n---\n\n## Migration Notes\n\n### For Administrators\n- Environment configuration is now read from database by default\n- File-based `configs.json` is only used as fallback (you'll be prompted)\n- Ensure database connectivity before running CLI commands\n\n### For Developers\n- Use `envConfig.logNamespace(\"your-module\")` for debug logging\n- Use `T[]` instead of `Array<T>` for type definitions\n- Database connection is now explicit in CLI context\n\n---\n\n## Testing Checklist\n\n- [ ] Import single Flickr album and verify page creation\n- [ ] Import multiple albums via bulk import\n- [ ] Verify album splitting works correctly\n- [ ] Verify template-based import inherits settings\n- [ ] Test Index row auto title toggle\n- [ ] Test CLI `local dev` and `local prod` commands\n- [ ] Verify database configuration is loaded (not file-based)\n- [ ] Check environment variable logging appears once only\n","contentHtml":"<h1>03-Feb-2026 — add external album import from Flickr <a href=\"https://github.com/nbarrett/ngx-ramblers/issues/147\">ref: #147</a></h1>\n<h2><a href=\"https://github.com/nbarrett/ngx-ramblers/actions/runs/21641819798\">build 459</a> — <a href=\"https://github.com/nbarrett/ngx-ramblers/commit/7333a4400b0742a1bb3793c4b22219605ce53b0d\">commit 7333a44</a></h2>\n<hr>\n<h2>Overview</h2>\n<p>This release introduces two major features: <strong>Flickr Album Import</strong> for bringing external photo albums into the platform, and significant <strong>Environment Setup Enhancements</strong> for database-driven configuration. It also includes numerous code quality improvements and developer experience enhancements.</p>\n<hr>\n<h1>User Guide</h1>\n<h2>New Features</h2>\n<h3>1. Import Flickr Albums</h3>\n<p>You can now import photo albums directly from Flickr without copying images to S3. Images remain hosted on Flickr while the album is managed within the platform.</p>\n<h4>How to Access</h4>\n<p>Navigate to <strong>Admin &gt; System Settings &gt; Image Migration &gt; Import from External Sources</strong></p>\n<h4>Single Album Import</h4>\n<ol>\n<li>Select <strong>Single Album</strong> mode</li>\n<li>Paste a Flickr album URL (e.g., <code>https://www.flickr.com/photos/username/albums/12345</code>)</li>\n<li>Enter a target path for the new page (e.g., <code>gallery/2024/summer-walk</code>)</li>\n<li>Optionally customise the album title and subtitle</li>\n<li>Click <strong>Import Album</strong></li>\n<li>The system will:<ul>\n<li>Fetch all photos from the Flickr album</li>\n<li>Extract photo titles and dates</li>\n<li>Create a new album page at your specified path</li>\n</ul>\n</li>\n</ol>\n<h4>Bulk Import (Multiple Albums)</h4>\n<ol>\n<li>Select <strong>Bulk Import</strong> mode</li>\n<li>Enter a Flickr user ID or username</li>\n<li>The system will fetch and display all albums for that user</li>\n<li>Select the albums you wish to import using checkboxes</li>\n<li>Set a base path (e.g., <code>gallery</code>) - albums will be created at <code>{base-path}/{album-name}</code></li>\n<li>Review the generated paths (you can modify them before import)</li>\n<li>Click <strong>Import Selected Albums</strong></li>\n<li>Monitor progress in real-time as each album is imported</li>\n</ol>\n<h4>Album Splitting</h4>\n<p>For large albums with photos from different events, you can split them:</p>\n<ol>\n<li>Enable <strong>Split by Photo Title</strong></li>\n<li>The system groups photos by their title patterns</li>\n<li>Preview how photos will be split into separate albums</li>\n<li>Choose which groups to include</li>\n<li>Each group becomes its own album page</li>\n</ol>\n<h4>What Gets Imported</h4>\n<ul>\n<li>Album title and description from Flickr</li>\n<li>All photo URLs (images remain on Flickr)</li>\n<li>Photo titles (displayed when &quot;Show Titles&quot; is enabled in grid view)</li>\n<li>Photo dates (for chronological ordering)</li>\n<li>Cover photo for album previews</li>\n</ul>\n<h4>Template Support</h4>\n<p>You can use an existing album page as a template:</p>\n<ol>\n<li>Enable <strong>Use Template</strong></li>\n<li>Enter the path of an existing album page</li>\n<li>The new album(s) will inherit the layout and grid settings from the template</li>\n</ol>\n<hr>\n<h3>2. Index Row Auto Title</h3>\n<p>Index rows now support automatic title generation from the page URL.</p>\n<h4>How It Works</h4>\n<ul>\n<li><strong>Auto Title enabled (default)</strong>: The index row automatically displays a title derived from the page URL/subtitle</li>\n<li><strong>Auto Title disabled</strong>: You can enter custom markdown content for the title area</li>\n</ul>\n<h4>How to Use</h4>\n<ol>\n<li>Edit any page with an Index row</li>\n<li>Find the <strong>Auto Title</strong> checkbox in the Index row settings</li>\n<li>When enabled, the title updates automatically based on the page path</li>\n<li>When disabled, a markdown editor appears for custom title content</li>\n</ol>\n<p>This is useful for:</p>\n<ul>\n<li>Consistent titles across similar pages</li>\n<li>Quick setup of new index pages</li>\n<li>Override capability when you need a custom title</li>\n</ul>\n<hr>\n<h3>3. Improved CLI Tool</h3>\n<p>The command-line interface has been significantly enhanced for local development.</p>\n<h4>Starting the Application Locally</h4>\n<pre><code class=\"language-bash\"># Development mode (with hot reload)\nngx-cli local dev staging\n\n# Production mode (build then run)\nngx-cli local prod staging\n</code></pre>\n<h4>Available Environments</h4>\n<pre><code class=\"language-bash\"># List all configured environments\nngx-cli local list\n</code></pre>\n<p>The CLI will:</p>\n<ul>\n<li>Check port availability before starting</li>\n<li>Load secrets from the appropriate environment file</li>\n<li>Configure Chrome/Chromedriver for scraping features</li>\n<li>Show real-time logs from both frontend and backend</li>\n</ul>\n<h4>Log Files</h4>\n<p>Use the <code>--log-dir</code> flag to save logs:</p>\n<pre><code class=\"language-bash\">ngx-cli local dev staging --log-dir ./logs --log-timestamp\n</code></pre>\n<hr>\n<h3>4. Environment Configuration from Database</h3>\n<p>Environment configuration is now stored in the database rather than file-based configs. This provides:</p>\n<ul>\n<li><strong>Centralised Configuration</strong>: All environment settings in one place</li>\n<li><strong>Real-time Updates</strong>: Changes take effect without redeployment</li>\n<li><strong>Better Security</strong>: Sensitive configuration stored in database, not files</li>\n</ul>\n<p>The system will automatically use database configuration, with file-based fallback only as a last resort (you&#39;ll be prompted before this happens).</p>\n<hr>\n<h2>Changes to Existing Features</h2>\n<h3>Album Grid View</h3>\n<ul>\n<li>Photo titles now display correctly when &quot;Show Titles&quot; is enabled</li>\n<li>Photo dates are stored and can be used for sorting</li>\n</ul>\n<h3>Template Selector</h3>\n<ul>\n<li>New template selector component for reusing page layouts</li>\n<li>Available when creating albums from external sources</li>\n</ul>\n<hr>\n<h1>Technical Changes</h1>\n<h2>GitHub Issue #147: Flickr Album Import - Completion Status</h2>\n<h3>Completed Requirements</h3>\n<table>\n<thead>\n<tr>\n<th>Requirement</th>\n<th>Status</th>\n</tr>\n</thead>\n<tbody><tr>\n<td>New &quot;Import from External Sources&quot; tab</td>\n<td>✅ Complete</td>\n</tr>\n<tr>\n<td>Single album import with URL input</td>\n<td>✅ Complete</td>\n</tr>\n<tr>\n<td>Bulk import from user albums</td>\n<td>✅ Complete</td>\n</tr>\n<tr>\n<td>Multi-select album interface</td>\n<td>✅ Complete</td>\n</tr>\n<tr>\n<td>Auto-generated paths from album names</td>\n<td>✅ Complete</td>\n</tr>\n<tr>\n<td>PageContent creation with correct structure</td>\n<td>✅ Complete</td>\n</tr>\n<tr>\n<td>ContentMetadata with Flickr URLs</td>\n<td>✅ Complete</td>\n</tr>\n<tr>\n<td>Photo title extraction (text field)</td>\n<td>✅ Complete</td>\n</tr>\n<tr>\n<td>Photo date extraction (date field)</td>\n<td>✅ Complete</td>\n</tr>\n<tr>\n<td>Real-time progress via WebSocket</td>\n<td>✅ Complete</td>\n</tr>\n<tr>\n<td>Error handling for invalid URLs</td>\n<td>✅ Complete</td>\n</tr>\n<tr>\n<td>Album splitting by photo title</td>\n<td>✅ Complete</td>\n</tr>\n<tr>\n<td>Template-based album creation</td>\n<td>✅ Complete</td>\n</tr>\n</tbody></table>\n<h3>Pending Testing</h3>\n<ul>\n<li>Albums display correctly in grid, gallery, and carousel views</li>\n<li>Photo titles display when <code>showTitles</code> is enabled</li>\n</ul>\n<hr>\n<h2>GitHub Issue #146: Environment Setup - Changes in This Release</h2>\n<h3>Completed in This Release</h3>\n<table>\n<thead>\n<tr>\n<th>Enhancement</th>\n<th>Status</th>\n</tr>\n</thead>\n<tbody><tr>\n<td>Database-driven environment configuration</td>\n<td>✅ Complete</td>\n</tr>\n<tr>\n<td>CLI database connection with explicit connect</td>\n<td>✅ Complete</td>\n</tr>\n<tr>\n<td>Fallback prompt before using file-based config</td>\n<td>✅ Complete</td>\n</tr>\n<tr>\n<td>Environment variable logging on CLI startup</td>\n<td>✅ Complete</td>\n</tr>\n<tr>\n<td>Standardised debug logging with <code>envConfig.logNamespace()</code></td>\n<td>✅ Complete</td>\n</tr>\n</tbody></table>\n<hr>\n<h2>Bonus Features (Outside Original Scope)</h2>\n<h3>1. External Album Import Framework</h3>\n<ul>\n<li>Extensible provider architecture (<code>ExternalAlbumProvider</code> interface)</li>\n<li>Support for multiple sources (Flickr implemented, Google Photos/Instagram ready)</li>\n<li>Album summary and metadata interfaces for any external source</li>\n</ul>\n<h3>2. Album Splitting Feature</h3>\n<ul>\n<li>Split large albums by photo title patterns</li>\n<li>Preview split results before importing</li>\n<li>Include/exclude specific groups</li>\n</ul>\n<h3>3. Template-Based Album Creation</h3>\n<ul>\n<li>Use existing album pages as templates</li>\n<li>Inherit layout, grid options, and styling</li>\n<li>Template selector component for easy selection</li>\n</ul>\n<h3>4. Index Row Auto Title</h3>\n<ul>\n<li>Automatic title generation from page URL</li>\n<li>Toggle between auto and manual markdown entry</li>\n<li>Defaults to enabled for new index rows</li>\n</ul>\n<h3>5. Enhanced CLI Local Development</h3>\n<ul>\n<li>Port availability checking before starting servers</li>\n<li>Chrome/Chromedriver validation and configuration</li>\n<li>Log file output with timestamps</li>\n<li>Clean process shutdown handling</li>\n</ul>\n<h3>6. Real-Time Import Progress</h3>\n<ul>\n<li>WebSocket-based progress updates</li>\n<li>Stage-by-stage progress reporting</li>\n<li>Activity logging during bulk imports</li>\n</ul>\n<h3>7. Code Quality Improvements</h3>\n<ul>\n<li>Replaced all <code>Array&lt;T&gt;</code> with <code>T[]</code> syntax</li>\n<li>Standardised debug logger creation with <code>envConfig.logNamespace()</code></li>\n<li>Cached environment variable validation (log once, not repeatedly)</li>\n<li>Explicit database connection in CLI commands</li>\n</ul>\n<hr>\n<h2>Migration Notes</h2>\n<h3>For Administrators</h3>\n<ul>\n<li>Environment configuration is now read from database by default</li>\n<li>File-based <code>configs.json</code> is only used as fallback (you&#39;ll be prompted)</li>\n<li>Ensure database connectivity before running CLI commands</li>\n</ul>\n<h3>For Developers</h3>\n<ul>\n<li>Use <code>envConfig.logNamespace(&quot;your-module&quot;)</code> for debug logging</li>\n<li>Use <code>T[]</code> instead of <code>Array&lt;T&gt;</code> for type definitions</li>\n<li>Database connection is now explicit in CLI context</li>\n</ul>\n<hr>\n<h2>Testing Checklist</h2>\n<ul>\n<li><input disabled=\"\" type=\"checkbox\"> Import single Flickr album and verify page creation</li>\n<li><input disabled=\"\" type=\"checkbox\"> Import multiple albums via bulk import</li>\n<li><input disabled=\"\" type=\"checkbox\"> Verify album splitting works correctly</li>\n<li><input disabled=\"\" type=\"checkbox\"> Verify template-based import inherits settings</li>\n<li><input disabled=\"\" type=\"checkbox\"> Test Index row auto title toggle</li>\n<li><input disabled=\"\" type=\"checkbox\"> Test CLI <code>local dev</code> and <code>local prod</code> commands</li>\n<li><input disabled=\"\" type=\"checkbox\"> Verify database configuration is loaded (not file-based)</li>\n<li><input disabled=\"\" type=\"checkbox\"> Check environment variable logging appears once only</li>\n</ul>\n"}