- Updated color classes in NotifyDemo.php to use warning colors.
- Added new warning color variables in app.css.
- Changed warning icon colors in callout.blade.php.
- Updated loading spinner and hover states in global-search.blade.php.
- Refactored warning messages and styles in project application views.
- Adjusted log display colors in get-logs.blade.php.
- Updated private key status indicators in index.blade.php.
- Changed hover and text colors for documentation links in cloudflare-tunnel.blade.php.
- Refactored server creation messages in by-hetzner.blade.php.
- Updated proxy warning button colors in proxy.blade.php.
- Changed loading spinner colors in show.blade.php.
- Updated deployment status colors in deployments.blade.php and show.blade.php.
Reduce label width from w-64 to w-32 to prevent layout issues
when the clear button is added next to the dropdown.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Add a 'Clear' button next to the cloud-init script dropdown that:
- Resets the dropdown to default (placeholder option)
- Clears the cloud-init script textarea
- Clears the script name input
- Unchecks the 'save script' checkbox
Improves UX by allowing users to quickly reset cloud-init fields
without manually clearing each field.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Remove 'selected' and 'disabled' attributes from the placeholder option
to ensure the dropdown shows "Load saved script..." by default instead
of appearing to select the first script.
When selected_cloud_init_script_id is null, the empty option will be
shown. The updatedSelectedCloudInitScriptId() method already handles
empty string values correctly by checking if ($value).
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Changes:
1. Remove description field from cloud-init scripts
- Updated migration to remove description column
- Updated model to remove description from fillable array
2. Redesign script name input layout
- Move script name input next to checkbox (always visible)
- Remove conditional rendering - input always shown
- Use placeholder instead of label for cleaner look
3. Fix dropdown type error
- Replace wire:change event with wire:model.live
- Use updatedSelectedCloudInitScriptId() lifecycle hook
- Add "disabled" attribute to placeholder option
- Properly handle empty string vs null in type casting
4. Improve validation
- Require both script content AND name for saving
- Remove description validation rule
- Add selected_cloud_init_script_id validation
5. Auto-populate name when loading saved script
- When user selects saved script, auto-fill the name field
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Remove the disabled state from the save checkbox to allow users to check it
at any time. The backend already validates that cloud_init_script is not
empty before saving (line 499 in ByHetzner.php), so empty/null scripts
will simply not be saved even if the checkbox is checked.
This improves UX by making the checkbox always interactive while maintaining
data integrity through backend validation.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Changes:
- Make save checkbox visible by default (not conditionally rendered)
- Disable checkbox when cloud_init_script is empty
- Auto-enable when user types in the script textarea (via Livewire reactivity)
- Remove unnecessary border wrapper around checkbox for cleaner look
- Checkbox styling now matches other checkboxes in the form (no border)
This improves UX by making the save option always discoverable while
preventing users from checking it when there's no script to save.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
This commit adds the ability to use cloud-init scripts when creating Hetzner servers through the integration. Users can write custom scripts that will be executed during server initialization, and optionally save these scripts at the team level for future reuse.
Key features:
- Textarea field for entering cloud-init scripts (bash or cloud-config YAML)
- Checkbox to save scripts for later use at team level
- Dropdown to load previously saved scripts
- Scripts are encrypted in the database
- Full validation and authorization checks
- Comprehensive unit and feature tests
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Display the monthly cost on the "Buy & Create Server" button
to give users clear visibility of the price before purchasing.
- Add computed property to calculate selected server's monthly price
- Update button text to show price dynamically (e.g., "€12.99/mo")
- Add tests for price formatting and edge cases
- Price updates reactively when user changes server type
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Add support for configuring IPv4 and IPv6 public network interfaces when creating servers through the Hetzner integration. Users can now enable or disable IPv4 and IPv6 independently, with both enabled by default.
Features:
- Added enable_ipv4 and enable_ipv6 checkboxes in the server creation form
- Both options are enabled by default as per Hetzner best practices
- IPv4 is preferred when both are enabled
- Fallback to IPv6 when only IPv6 is enabled
- Proper validation and error handling for network configuration
- Comprehensive test coverage for IP address selection logic
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
* chore(version): update coolify-realtime to version 1.0.9 in docker-compose and versions files
* feat(migration): add is_sentinel_enabled column to server_settings with default true
* fix(migration): update default value handling for is_sentinel_enabled column in server_settings
* feat(seeder): dispatch StartProxy action for each server in ProductionSeeder
* feat(seeder): add CheckAndStartSentinelJob dispatch for each server in ProductionSeeder
* fix(seeder): conditionally dispatch CheckAndStartSentinelJob based on server's sentinel status
* feat(seeder): conditionally dispatch StartProxy action based on proxy check result
* refactor(ui): terminal
* refactor(ui): remove terminal header from execute-container-command view
* refactor(ui): remove unnecessary padding from deployment, backup, and logs sections
* fix(service): disable healthcheck logging for Gotenberg (#6005)
* fix(service): Joplin volume name (#5930)
* chore(version): update coolify version to 4.0.0-beta.420 and nightly version to 4.0.0-beta.421
* fix(server): update sentinelUpdatedAt assignment to use server's sentinel_updated_at property
* feat(service): update Changedetection template (#5937)
* chore(service): changedetection remove unused code
* fix(service): audiobookshelf healthcheck command (#5993)
* refactor(service): update Hoarder to their new name karakeep (#5964)
* fix(service): downgrade Evolution API phone version (#5977)
* feat(service): add Miniflux service (#5843)
* refactor(service): karakeep naming and formatting
* refactor(service): improve miniflux
- improve DB url
- add depends_on
- formatting, naming & order
* feat(service): add Pingvin Share service (#5969)
* fix(service): pingvinshare-with-clamav
- add platform to make clamav work
- formatting
* feat(auth): Add Discord OAuth Provider (#5552)
* feat(auth): Add Clerk OAuth Provider (#5553)
* feat(auth): add Zitadel OAuth Provider (#5490)
* Update composer.lock
* fix(ssh): scp requires square brackets for ipv6 (#6001)
* refactor(core): rename API rate limit ENV
* refactor(ui): simplify container selection form in execute-container-command view
* chore(service): Update Evolution API image to the official one (#6031)
* chore(versions): bump coolify versions to v4.0.0-beta.420 and v4.0.0-beta.421
* fix(github): changing github app breaks the webhook. it does not anymore
* feat(service): enhance service status handling and UI updates
* fix(parser): improve FQDN generation and update environment variable handling
* fix(ui): enhance status refresh buttons with loading indicators
* fix(ui): update confirmation button text for stopping database and service
* fix(routes): update middleware for deploy route to use 'api.ability:deploy'
* fix(ui): refine API token creation form and update helper text for clarity
* fix(ui): adjust layout of deployments section for improved alignment
* chore(dependencies): update composer dependencies to latest versions including resend-laravel to ^0.19.0 and aws-sdk-php to 3.347.0
* refactor(email): streamline SMTP and resend settings logic for improved clarity
* fix(ui): adjust project grid layout and refine server border styling for better visibility
* fix(ui): update border styling for consistency across components and enhance loading indicators
* feat(cleanup): add functionality to delete teams with no members or servers in CleanupStuckedResources command
* refactor(invitation): rename methods for consistency and enhance invitation deletion logic
* refactor(user): streamline user deletion process and enhance team management logic
* fix(ui): add padding to section headers in settings views for improved spacing
* fix(ui): reduce gap between input fields in email settings for better alignment
* fix(docker): conditionally enable gzip compression in Traefik labels based on configuration
* fix(parser): enable gzip compression conditionally for Pocketbase images and streamline service creation logic
* fix(ui): update padding for trademarks policy and enhance spacing in advanced settings section
* feat(ui): add heart icon and enhance popup messaging for sponsorship support
* feat(settings): add sponsorship popup toggle and corresponding database migration
* fix(ui): correct closing tag for sponsorship link in layout popups
* fix(ui): refine wording in sponsorship donation prompt in layout popups
* fix(ui): update navbar icon color and enhance popup layout for sponsorship support
* Update resources/views/livewire/project/shared/health-checks.blade.php
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
* Update app/Livewire/Subscription/Index.php
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
* fix(ui): add target="_blank" to sponsorship links in layout popups for improved user experience
* fix(models): refine comment wording in User model for clarity on user deletion criteria
* Update app/Providers/RouteServiceProvider.php
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
* fix(models): improve user deletion logic in User model to handle team member roles and prevent deletion if user is alone in root team
* fix(ui): update wording in sponsorship prompt for clarity and engagement
---------
Co-authored-by: Andras Bacsai <5845193+andrasbacsai@users.noreply.github.com>
Co-authored-by: Khiet Tam Nguyen <86177399+nktnet1@users.noreply.github.com>
Co-authored-by: Carsten <BanditsBacon@users.noreply.github.com>
Co-authored-by: Alberto Rizzi <48057685+albertorizzi@users.noreply.github.com>
Co-authored-by: Jonas Klesen <deklesen@gmail.com>
Co-authored-by: Stew Night. <22344601+stewnight@users.noreply.github.com>
Co-authored-by: Jeffer Marcelino <jeffersunde72@gmail.com>
Co-authored-by: Lucas Eduardo <lucas59356@gmail.com>
Co-authored-by: CrazyTim71 <118295691+CrazyTim71@users.noreply.github.com>
Co-authored-by: Yassir Elmarissi <yassir.elmarissi@hm.edu>
Co-authored-by: Hauke Schnau <hauke@schnau-lilienthal.de>
Co-authored-by: Darren Sisson <74752850+djsisson@users.noreply.github.com>
Co-authored-by: Alkesh Das <67038642+smad-bro@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>