Conversation
Introduces a comprehensive REST API for WordPress multi-environment management, including endpoints for project listing, environment CRUD, promotion, sync, comparison, locking, activity logs, container logs, resource limits, basic auth, WP-CLI, health checks, disk usage, bulk operations, and auto-sync scheduling. Adds new models for environment activity, promotion jobs, and sanitization profiles, and integrates auto-sync scheduling into the app startup. Updates model imports and registration to include the new models.
Switched all template icon URLs to use local /serverkit.ai/imgs/template-icons/ assets for consistency and reliability. Improved the Sidebar component with a new user context menu featuring theme switching, settings navigation, and logout, along with conditional display of the WordPress pipeline link. Added and updated related styles for the sidebar, user menu, and page headers, and introduced new theme variables for code/terminal backgrounds.
Introduces a multi-step onboarding wizard for initial server setup, including admin account creation, use case selection, resource tier display, and summary. Adds backend support for onboarding completion and use case storage. Implements developer mode toggle in settings, exposing an icon reference panel. Updates styles and refactors related frontend logic for setup and settings pages.
There was a problem hiding this comment.
Pull request overview
This is a comprehensive pull request introducing three major feature sets: WordPress environment pipeline management, template icon updates, and an onboarding wizard.
Changes:
- Full-stack WordPress environment pipeline implementation with promotion jobs, sanitization profiles, environment activities, Docker/domain/health services, and Git integration
- New React frontend with pipeline view, sync/promote modals, WP-CLI terminal, and health monitoring panels
- Complete onboarding wizard with multi-step setup (account, intent, tier, summary)
- Updated all 58+ template YAML files with standardized icon URLs pointing to serverkit.ai CDN
- Enhanced sidebar with developer mode toggle and user context menu
- New developer mode feature with icon reference tool
Reviewed changes
Copilot reviewed 124 out of 125 changed files in this pull request and generated 21 comments.
Show a summary per file
| File | Description |
|---|---|
| frontend/src/styles/pages/_terminal.less | Replaced hardcoded colors with CSS variables for better theme support |
| frontend/src/styles/pages/_setup-wizard.less | New comprehensive styles for multi-step onboarding wizard |
| frontend/src/styles/pages/_settings.less | Added icon reference grid for developer mode |
| frontend/src/styles/_theme-variables.less | Added code/terminal color variables for dark and light themes |
| frontend/src/pages/Setup.jsx | Completely refactored from single-step to multi-step wizard |
| frontend/src/pages/WordPressProjects.jsx | New pipeline projects listing page |
| frontend/src/pages/Templates.jsx | Replaced emoji icons with Lucide React icons |
| frontend/src/components/Sidebar.jsx | Enhanced with user context menu, theme switcher, and developer mode integration |
| backend/app/services/db_sync_service.py | Enhanced with anonymization, password reset, and container-to-container operations |
| backend/app/services/environment_*.py | New services for health monitoring, domain management, Docker operations |
| backend/app/models/*.py | New models for environment activities, promotion jobs, and sanitization profiles |
| backend/app/api/auth.py | Added onboarding completion endpoint |
| backend/app/sockets.py | Added pipeline event streaming |
| backend/templates/*.yaml | Updated 58+ templates with CDN icon URLs |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| --bg-code: #1a1a2e; | ||
| --text-code: #e2e8f0; |
There was a problem hiding this comment.
The hardcoded color values for code/terminal backgrounds could be extracted to semantic variables. Consider defining @bg-code and @text-code in the color palette section rather than directly in the CSS custom properties. This would make the color values easier to maintain and update across themes.
| .modal-footer { | ||
| display: flex; | ||
| gap: @space-3; | ||
| justify-content: flex-end; | ||
| padding: @space-4 @space-6; | ||
| border-top: 1px solid @border-subtle; | ||
| } |
There was a problem hiding this comment.
The modal footer is being added but there's already a modal-actions class defined at line 73. This creates potential confusion about which class to use for footer actions. Consider consolidating these or clarifying the distinction in usage (e.g., modal-actions for bottom-aligned buttons vs modal-footer for a broader footer section).
| # Reset passwords to a known hash (password: 'changeme') | ||
| if reset_passwords and 'user_pass' in line.lower(): | ||
| line = re.sub( | ||
| r"\$P\$[A-Za-z0-9./]{31}", | ||
| "$P$BchangemeHASHEDplaceholder00000", |
There was a problem hiding this comment.
The password hash being set here appears to be a placeholder. The comment says "password: 'changeme'" but the hash value "$P$BchangemeHASHEDplaceholder00000" is not a valid WordPress password hash format (should be 34 characters for phpass). This will likely prevent login. Consider using a properly generated WordPress password hash or document that this is intentionally a non-working placeholder.
| # Reset passwords to a known hash (password: 'changeme') | |
| if reset_passwords and 'user_pass' in line.lower(): | |
| line = re.sub( | |
| r"\$P\$[A-Za-z0-9./]{31}", | |
| "$P$BchangemeHASHEDplaceholder00000", | |
| # Reset passwords to an intentionally invalid placeholder so sanitized DBs can't be logged into | |
| if reset_passwords and 'user_pass' in line.lower(): | |
| line = re.sub( | |
| r"\$P\$[A-Za-z0-9./]{31}", | |
| "***SANITIZED_PASSWORD***", |
|
|
||
| const Sidebar = () => { | ||
| const { user, logout } = useAuth(); | ||
| const { theme, resolvedTheme, setTheme } = useTheme(); |
There was a problem hiding this comment.
Unused variable resolvedTheme.
|
|
||
| if (!selectedIds || selectedIds.length === 0) return null; | ||
|
|
||
| const selectedNames = selectedIds.map(id => { |
There was a problem hiding this comment.
Unused variable selectedNames.
| fp = os.path.join(dirpath, f) | ||
| try: | ||
| total += os.path.getsize(fp) | ||
| except OSError: |
There was a problem hiding this comment.
'except' clause does nothing but pass and there is no explanatory comment.
| total += os.path.getsize(fp) | ||
| except OSError: | ||
| pass | ||
| except Exception: |
There was a problem hiding this comment.
'except' clause does nothing but pass and there is no explanatory comment.
| 'message': message, | ||
| 'percent': int((step / total) * 100) if total > 0 else 0, | ||
| }) | ||
| except Exception: |
There was a problem hiding this comment.
'except' clause does nothing but pass and there is no explanatory comment.
| for line in f: | ||
| if line.startswith('DB_PASSWORD='): | ||
| return line.strip().split('=', 1)[1] | ||
| except Exception: |
There was a problem hiding this comment.
'except' clause does nothing but pass and there is no explanatory comment.
| if '=' in line and not line.startswith('#'): | ||
| key, value = line.split('=', 1) | ||
| env_vars[key] = value | ||
| except Exception: |
There was a problem hiding this comment.
'except' clause does nothing but pass and there is no explanatory comment.
Summary
promotion jobs, sanitization profiles, environment activities, Docker/domain/health services, Git integration, and a rich
React frontend with pipeline view, sync/promote modals, WP-CLI terminal, health panels, and more
developer mode toggle and improved layout
feature flag in settings, and auth context updates for onboarding state