{"id":"69a56092eb423d181edb0a74","title":"2026 03 02 Issue 146","path":"how-to/committee/release-notes/2026-03-02-issue-146","contentMarkdown":"# 02-Mar-2026 — Environment-setup, Album and 1 more areas: 1 feature and 3 fixes [#146](https://github.com/nbarrett/ngx-ramblers/issues/146)\n\n## [build 508](https://github.com/nbarrett/ngx-ramblers/actions/runs/22570391360) — [commit 590a441](https://github.com/nbarrett/ngx-ramblers/commit/590a441d1e66d4b55715059379df5d976f74825b)\n\n_____\n\n- Fix Fly.io shared IPv4 allocation using sharedIpAddress fallback for known GraphQL API bug\n- Wire notification configs to built-in processes (forgot-password, walks, expenses, contact-us)\n- Assign admin user to committee roles (membership, support) for email sender resolution\n- Register admin as Brevo sender during environment creation\n- Add admin password reset button to Modify Environment flow\n- Allow password reset route to bypass maintenance mode guard\n- Add seed endpoints for sample pages, notification configs, and Brevo templates\n- Extract shared helpers: toGroupShortName, cleanIncorrectPageContent, runMigrations, registerBrevoSender\n- Make notification config seeding idempotent with upsert pattern\n- Fix arrow-parens lint violations across all server TypeScript files\n\n### **environment-setup**: use database for secrets and Brevo config, fix GitHub status comparison ([#146](https://github.com/nbarrett/ngx-ramblers/issues/146))\n\n- Switch loadEnvironmentContext from file-based to database-only secrets\n- Read Brevo API key via configuredBrevo() instead of secrets.BREVO_API_KEY\n- Destroy route uses database mongo config instead of file-based secrets\n- GitHub status endpoint no longer fakes CONFIGS_JSON from database, honestly\nreports unknown state until a push establishes the comparison baseline\n- Use sortBy from arrays.ts for reconciliation sorting\n- Remove unused loadSecretsForEnvironment import\n\n### **album**: real-time border radius updates, toolbar full-width layout, and settings row spacing\n\n- Change gridViewOptions to a getter in AlbumComponent to ensure edit form mutations flow through to the preview grid in real time\n- Add .album-toolbar CSS rules to spread badge-buttons and badge-steppers across full width\n- Add flex-fill to settings row form-groups so fields fill available width\n- Create missing album.sass referenced by component\n\n### **admin**: stale-while-revalidate area cache, skip migration check on password reset, and centralise admin paths ([#146](https://github.com/nbarrett/ngx-ramblers/issues/146))\n\nArea cache now always serves cached data immediately and refreshes\nin the background when expired, preventing visible loading delays.\nReplace banned Date.now() with dateTimeNowAsValue().\nSkip migration status check when navigating to set-password URLs\nso password resets work on newly provisioned environments with\npending migrations.\nCentralise admin/set-password and admin/maintenance path strings\nas shared constants in system.model.ts and update all TypeScript\nreferences across frontend guards, services, and backend routes.","contentHtml":"<h1>02-Mar-2026 — Environment-setup, Album and 1 more areas: 1 feature and 3 fixes <a href=\"https://github.com/nbarrett/ngx-ramblers/issues/146\">#146</a></h1>\n<h2><a href=\"https://github.com/nbarrett/ngx-ramblers/actions/runs/22570391360\">build 508</a> — <a href=\"https://github.com/nbarrett/ngx-ramblers/commit/590a441d1e66d4b55715059379df5d976f74825b\">commit 590a441</a></h2>\n<hr>\n<ul>\n<li>Fix Fly.io shared IPv4 allocation using sharedIpAddress fallback for known GraphQL API bug</li>\n<li>Wire notification configs to built-in processes (forgot-password, walks, expenses, contact-us)</li>\n<li>Assign admin user to committee roles (membership, support) for email sender resolution</li>\n<li>Register admin as Brevo sender during environment creation</li>\n<li>Add admin password reset button to Modify Environment flow</li>\n<li>Allow password reset route to bypass maintenance mode guard</li>\n<li>Add seed endpoints for sample pages, notification configs, and Brevo templates</li>\n<li>Extract shared helpers: toGroupShortName, cleanIncorrectPageContent, runMigrations, registerBrevoSender</li>\n<li>Make notification config seeding idempotent with upsert pattern</li>\n<li>Fix arrow-parens lint violations across all server TypeScript files</li>\n</ul>\n<h3><strong>environment-setup</strong>: use database for secrets and Brevo config, fix GitHub status comparison (<a href=\"https://github.com/nbarrett/ngx-ramblers/issues/146\">#146</a>)</h3>\n<ul>\n<li>Switch loadEnvironmentContext from file-based to database-only secrets</li>\n<li>Read Brevo API key via configuredBrevo() instead of secrets.BREVO_API_KEY</li>\n<li>Destroy route uses database mongo config instead of file-based secrets</li>\n<li>GitHub status endpoint no longer fakes CONFIGS_JSON from database, honestly\nreports unknown state until a push establishes the comparison baseline</li>\n<li>Use sortBy from arrays.ts for reconciliation sorting</li>\n<li>Remove unused loadSecretsForEnvironment import</li>\n</ul>\n<h3><strong>album</strong>: real-time border radius updates, toolbar full-width layout, and settings row spacing</h3>\n<ul>\n<li>Change gridViewOptions to a getter in AlbumComponent to ensure edit form mutations flow through to the preview grid in real time</li>\n<li>Add .album-toolbar CSS rules to spread badge-buttons and badge-steppers across full width</li>\n<li>Add flex-fill to settings row form-groups so fields fill available width</li>\n<li>Create missing album.sass referenced by component</li>\n</ul>\n<h3><strong>admin</strong>: stale-while-revalidate area cache, skip migration check on password reset, and centralise admin paths (<a href=\"https://github.com/nbarrett/ngx-ramblers/issues/146\">#146</a>)</h3>\n<p>Area cache now always serves cached data immediately and refreshes\nin the background when expired, preventing visible loading delays.\nReplace banned Date.now() with dateTimeNowAsValue().\nSkip migration status check when navigating to set-password URLs\nso password resets work on newly provisioned environments with\npending migrations.\nCentralise admin/set-password and admin/maintenance path strings\nas shared constants in system.model.ts and update all TypeScript\nreferences across frontend guards, services, and backend routes.</p>\n"}