diff --git a/README.md b/README.md
index 000134c64..fe59db3d0 100644
--- a/README.md
+++ b/README.md
@@ -31,7 +31,7 @@ Special thanks to our biggest sponsors, [CCCareers](https://cccareers.org/) and
 
 
 
-
+
 
 
 
diff --git a/app/Console/Commands/Init.php b/app/Console/Commands/Init.php
index b0073e1f0..9cf64181f 100644
--- a/app/Console/Commands/Init.php
+++ b/app/Console/Commands/Init.php
@@ -99,7 +99,7 @@ class Init extends Command
             return;
         }
         try {
-            Http::get("https://get.coollabs.io/coolify/v4/alive?appId=$id&version=$version");
+            Http::get("https://undead.coollabs.io/coolify/v4/alive?appId=$id&version=$version");
             echo "I am alive!\n";
         } catch (\Throwable $e) {
             echo "Error in alive: {$e->getMessage()}\n";
@@ -142,83 +142,83 @@ class Init extends Command
         try {
             $applications = Application::withTrashed()->whereNotNull('deleted_at')->get();
             foreach ($applications as $application) {
-                echo "Deleting stucked application: {$application->name}\n";
+                echo "Deleting stuck application: {$application->name}\n";
                 $application->forceDelete();
             }
         } catch (\Throwable $e) {
-            echo "Error in cleaning stucked application: {$e->getMessage()}\n";
+            echo "Error in cleaning stuck application: {$e->getMessage()}\n";
         }
         try {
             $postgresqls = StandalonePostgresql::withTrashed()->whereNotNull('deleted_at')->get();
             foreach ($postgresqls as $postgresql) {
-                echo "Deleting stucked postgresql: {$postgresql->name}\n";
+                echo "Deleting stuck postgresql: {$postgresql->name}\n";
                 $postgresql->forceDelete();
             }
         } catch (\Throwable $e) {
-            echo "Error in cleaning stucked postgresql: {$e->getMessage()}\n";
+            echo "Error in cleaning stuck postgresql: {$e->getMessage()}\n";
         }
         try {
             $redis = StandaloneRedis::withTrashed()->whereNotNull('deleted_at')->get();
             foreach ($redis as $redis) {
-                echo "Deleting stucked redis: {$redis->name}\n";
+                echo "Deleting stuck redis: {$redis->name}\n";
                 $redis->forceDelete();
             }
         } catch (\Throwable $e) {
-            echo "Error in cleaning stucked redis: {$e->getMessage()}\n";
+            echo "Error in cleaning stuck redis: {$e->getMessage()}\n";
         }
         try {
             $mongodbs = StandaloneMongodb::withTrashed()->whereNotNull('deleted_at')->get();
             foreach ($mongodbs as $mongodb) {
-                echo "Deleting stucked mongodb: {$mongodb->name}\n";
+                echo "Deleting stuck mongodb: {$mongodb->name}\n";
                 $mongodb->forceDelete();
             }
         } catch (\Throwable $e) {
-            echo "Error in cleaning stucked mongodb: {$e->getMessage()}\n";
+            echo "Error in cleaning stuck mongodb: {$e->getMessage()}\n";
         }
         try {
             $mysqls = StandaloneMysql::withTrashed()->whereNotNull('deleted_at')->get();
             foreach ($mysqls as $mysql) {
-                echo "Deleting stucked mysql: {$mysql->name}\n";
+                echo "Deleting stuck mysql: {$mysql->name}\n";
                 $mysql->forceDelete();
             }
         } catch (\Throwable $e) {
-            echo "Error in cleaning stucked mysql: {$e->getMessage()}\n";
+            echo "Error in cleaning stuck mysql: {$e->getMessage()}\n";
         }
         try {
             $mariadbs = StandaloneMariadb::withTrashed()->whereNotNull('deleted_at')->get();
             foreach ($mariadbs as $mariadb) {
-                echo "Deleting stucked mariadb: {$mariadb->name}\n";
+                echo "Deleting stuck mariadb: {$mariadb->name}\n";
                 $mariadb->forceDelete();
             }
         } catch (\Throwable $e) {
-            echo "Error in cleaning stucked mariadb: {$e->getMessage()}\n";
+            echo "Error in cleaning stuck mariadb: {$e->getMessage()}\n";
         }
         try {
             $services = Service::withTrashed()->whereNotNull('deleted_at')->get();
             foreach ($services as $service) {
-                echo "Deleting stucked service: {$service->name}\n";
+                echo "Deleting stuck service: {$service->name}\n";
                 $service->forceDelete();
             }
         } catch (\Throwable $e) {
-            echo "Error in cleaning stucked service: {$e->getMessage()}\n";
+            echo "Error in cleaning stuck service: {$e->getMessage()}\n";
         }
         try {
             $serviceApps = ServiceApplication::withTrashed()->whereNotNull('deleted_at')->get();
             foreach ($serviceApps as $serviceApp) {
-                echo "Deleting stucked serviceapp: {$serviceApp->name}\n";
+                echo "Deleting stuck serviceapp: {$serviceApp->name}\n";
                 $serviceApp->forceDelete();
             }
         } catch (\Throwable $e) {
-            echo "Error in cleaning stucked serviceapp: {$e->getMessage()}\n";
+            echo "Error in cleaning stuck serviceapp: {$e->getMessage()}\n";
         }
         try {
             $serviceDbs = ServiceDatabase::withTrashed()->whereNotNull('deleted_at')->get();
             foreach ($serviceDbs as $serviceDb) {
-                echo "Deleting stucked serviceapp: {$serviceDb->name}\n";
+                echo "Deleting stuck serviceapp: {$serviceDb->name}\n";
                 $serviceDb->forceDelete();
             }
         } catch (\Throwable $e) {
-            echo "Error in cleaning stucked serviceapp: {$e->getMessage()}\n";
+            echo "Error in cleaning stuck serviceapp: {$e->getMessage()}\n";
         }
 
         // Cleanup any resources that are not attached to any environment or destination or server
diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php
index 6338d7625..fcc570f30 100644
--- a/app/Http/Controllers/Controller.php
+++ b/app/Http/Controllers/Controller.php
@@ -2,11 +2,13 @@
 
 namespace App\Http\Controllers;
 
+use App\Events\TestEvent;
 use App\Models\InstanceSettings;
 use App\Models\S3Storage;
 use App\Models\StandalonePostgresql;
 use App\Models\TeamInvitation;
 use App\Models\User;
+use App\Providers\RouteServiceProvider;
 use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
 use Illuminate\Foundation\Validation\ValidatesRequests;
 use Illuminate\Routing\Controller as BaseController;
@@ -14,11 +16,55 @@ use Illuminate\Support\Facades\Auth;
 use Illuminate\Support\Facades\Crypt;
 use Illuminate\Support\Facades\Hash;
 use Illuminate\Support\Str;
+use Laravel\Fortify\Fortify;
+use Laravel\Fortify\Contracts\FailedPasswordResetLinkRequestResponse;
+use Laravel\Fortify\Contracts\SuccessfulPasswordResetLinkRequestResponse;
+use Illuminate\Support\Facades\Password;
 
 class Controller extends BaseController
 {
     use AuthorizesRequests, ValidatesRequests;
 
+    public function realtime_test() {
+        if (auth()->user()?->currentTeam()->id !== 0) {
+            return redirect(RouteServiceProvider::HOME);
+        }
+        TestEvent::dispatch();
+        return 'Look at your other tab.';
+    }
+    public function verify() {
+        return view('auth.verify-email');
+    }
+    public function email_verify() {
+        request()->fulfill();
+        $name = request()->user()?->name;
+        send_internal_notification("User {$name} verified their email address.");
+        return redirect(RouteServiceProvider::HOME);
+    }
+    public function forgot_password() {
+        if (is_transactional_emails_active()) {
+            $arrayOfRequest = request()->only(Fortify::email());
+            request()->merge([
+                'email' => Str::lower($arrayOfRequest['email']),
+            ]);
+            $type = set_transanctional_email_settings();
+            if (!$type) {
+                return response()->json(['message' => 'Transactional emails are not active'], 400);
+            }
+            request()->validate([Fortify::email() => 'required|email']);
+            $status = Password::broker(config('fortify.passwords'))->sendResetLink(
+                request()->only(Fortify::email())
+            );
+            if ($status == Password::RESET_LINK_SENT) {
+                return app(SuccessfulPasswordResetLinkRequestResponse::class, ['status' => $status]);
+            }
+            if ($status == Password::RESET_THROTTLED) {
+                return response('Already requested a password reset in the past minutes.', 400);
+            }
+            return app(FailedPasswordResetLinkRequestResponse::class, ['status' => $status]);
+        }
+        return response()->json(['message' => 'Transactional emails are not active'], 400);
+    }
     public function link()
     {
         $token = request()->get('token');
@@ -51,90 +97,7 @@ class Controller extends BaseController
         return redirect()->route('login')->with('error', 'Invalid credentials.');
     }
 
-    public function license()
-    {
-        if (!isCloud()) {
-            abort(404);
-        }
-        return view('settings.license', [
-            'settings' => InstanceSettings::get(),
-        ]);
-    }
-
-    public function force_passoword_reset()
-    {
-        return view('auth.force-password-reset');
-    }
-    public function boarding()
-    {
-        if (currentTeam()->boarding || isDev()) {
-            return view('boarding');
-        } else {
-            return redirect()->route('dashboard');
-        }
-    }
-
-    public function settings()
-    {
-        if (isInstanceAdmin()) {
-            $settings = InstanceSettings::get();
-            $database = StandalonePostgresql::whereName('coolify-db')->first();
-            if ($database) {
-                if ($database->status !== 'running') {
-                    $database->status = 'running';
-                    $database->save();
-                }
-                $s3s = S3Storage::whereTeamId(0)->get();
-            }
-            return view('settings.configuration', [
-                'settings' => $settings,
-                'database' => $database,
-                's3s' => $s3s ?? [],
-            ]);
-        } else {
-            return redirect()->route('dashboard');
-        }
-    }
-
-    public function team()
-    {
-        $invitations = [];
-        if (auth()->user()->isAdminFromSession()) {
-            $invitations = TeamInvitation::whereTeamId(currentTeam()->id)->get();
-        }
-        return view('team.index', [
-            'invitations' => $invitations,
-        ]);
-    }
-
-    public function storages()
-    {
-        $s3 = S3Storage::ownedByCurrentTeam()->get();
-        return view('team.storages.all', [
-            's3' => $s3,
-        ]);
-    }
-
-    public function storages_show()
-    {
-        $storage = S3Storage::ownedByCurrentTeam()->whereUuid(request()->storage_uuid)->firstOrFail();
-        return view('team.storages.show', [
-            'storage' => $storage,
-        ]);
-    }
-
-    public function members()
-    {
-        $invitations = [];
-        if (auth()->user()->isAdminFromSession()) {
-            $invitations = TeamInvitation::whereTeamId(currentTeam()->id)->get();
-        }
-        return view('team.members', [
-            'invitations' => $invitations,
-        ]);
-    }
-
-    public function acceptInvitation()
+    public function accept_invitation()
     {
         try {
             $resetPassword = request()->query('reset-password');
@@ -169,7 +132,7 @@ class Controller extends BaseController
         }
     }
 
-    public function revokeInvitation()
+    public function revoke_invitation()
     {
         try {
             $invitation = TeamInvitation::whereUuid(request()->route('uuid'))->firstOrFail();
diff --git a/app/Http/Controllers/DatabaseController.php b/app/Http/Controllers/DatabaseController.php
deleted file mode 100644
index 684e427f9..000000000
--- a/app/Http/Controllers/DatabaseController.php
+++ /dev/null
@@ -1,84 +0,0 @@
-load(['projects'])->projects->where('uuid', request()->route('project_uuid'))->first();
-        if (!$project) {
-            return redirect()->route('dashboard');
-        }
-        $environment = $project->load(['environments'])->environments->where('name', request()->route('environment_name'))->first()->load(['applications']);
-        if (!$environment) {
-            return redirect()->route('dashboard');
-        }
-        $database = $environment->databases()->where('uuid', request()->route('database_uuid'))->first();
-        if (!$database) {
-            return redirect()->route('dashboard');
-        }
-        return view('project.database.configuration', ['database' => $database]);
-    }
-
-    public function executions()
-    {
-        $backup_uuid = request()->route('backup_uuid');
-        $project = currentTeam()->load(['projects'])->projects->where('uuid', request()->route('project_uuid'))->first();
-        if (!$project) {
-            return redirect()->route('dashboard');
-        }
-        $environment = $project->load(['environments'])->environments->where('name', request()->route('environment_name'))->first()->load(['applications']);
-        if (!$environment) {
-            return redirect()->route('dashboard');
-        }
-        $database = $environment->databases()->where('uuid', request()->route('database_uuid'))->first();
-        if (!$database) {
-            return redirect()->route('dashboard');
-        }
-        $backup = $database->scheduledBackups->where('uuid', $backup_uuid)->first();
-        if (!$backup) {
-            return redirect()->route('dashboard');
-        }
-        $executions = collect($backup->executions)->sortByDesc('created_at');
-        return view('project.database.backups.executions', [
-            'database' => $database,
-            'backup' => $backup,
-            'executions' => $executions,
-            's3s' => currentTeam()->s3s,
-        ]);
-    }
-
-    public function backups()
-    {
-        $project = currentTeam()->load(['projects'])->projects->where('uuid', request()->route('project_uuid'))->first();
-        if (!$project) {
-            return redirect()->route('dashboard');
-        }
-        $environment = $project->load(['environments'])->environments->where('name', request()->route('environment_name'))->first()->load(['applications']);
-        if (!$environment) {
-            return redirect()->route('dashboard');
-        }
-        $database = $environment->databases()->where('uuid', request()->route('database_uuid'))->first();
-        if (!$database) {
-            return redirect()->route('dashboard');
-        }
-        // No backups for redis
-        if ($database->getMorphClass() === 'App\Models\StandaloneRedis') {
-            return redirect()->route('project.database.configuration', [
-                'project_uuid' => $project->uuid,
-                'environment_name' => $environment->name,
-                'database_uuid' => $database->uuid,
-            ]);
-        }
-        return view('project.database.backups.all', [
-            'database' => $database,
-            's3s' => currentTeam()->s3s,
-        ]);
-    }
-}
diff --git a/app/Jobs/ApplicationDeploymentJob.php b/app/Jobs/ApplicationDeploymentJob.php
index 5ce4040e7..c461c15f4 100644
--- a/app/Jobs/ApplicationDeploymentJob.php
+++ b/app/Jobs/ApplicationDeploymentJob.php
@@ -30,6 +30,7 @@ use Spatie\Url\Url;
 use Symfony\Component\Yaml\Yaml;
 use Throwable;
 use Visus\Cuid2\Cuid2;
+use Yosymfony\Toml\Toml;
 
 class ApplicationDeploymentJob implements ShouldQueue, ShouldBeEncrypted
 {
@@ -73,6 +74,8 @@ class ApplicationDeploymentJob implements ShouldQueue, ShouldBeEncrypted
     private $env_args;
     private $docker_compose;
     private $docker_compose_base64;
+    private ?string $nixpacks_plan = null;
+    private ?string $nixpacks_type = null;
     private string $dockerfile_location = '/Dockerfile';
     private string $docker_compose_location = '/docker-compose.yml';
     private ?string $docker_compose_custom_start_command = null;
@@ -170,7 +173,7 @@ class ApplicationDeploymentJob implements ShouldQueue, ShouldBeEncrypted
                     if ($containerName === 'coolify-proxy') {
                         continue;
                     }
-                    if (preg_match('/-(\d{12})/',$containerName)) {
+                    if (preg_match('/-(\d{12})/', $containerName)) {
                         continue;
                     }
                     $containerIp = data_get($container, 'IPv4Address');
@@ -347,6 +350,9 @@ class ApplicationDeploymentJob implements ShouldQueue, ShouldBeEncrypted
         $this->generate_image_names();
         $this->check_image_locally_or_remotely();
         if (str($this->saved_outputs->get('local_image_found'))->isNotEmpty()) {
+            $this->execute_remote_command([
+                "echo 'Image found ({$this->production_image_name}) with the same Git Commit SHA. Restarting container.'",
+            ]);
             $this->create_workdir();
             $this->generate_compose_file();
             $this->rolling_update();
@@ -579,7 +585,7 @@ class ApplicationDeploymentJob implements ShouldQueue, ShouldBeEncrypted
         $this->generate_nixpacks_confs();
         $this->generate_compose_file();
         $this->generate_build_env_variables();
-        $this->add_build_env_variables_to_dockerfile();
+        // $this->add_build_env_variables_to_dockerfile();
         $this->build_image();
         $this->rolling_update();
     }
@@ -601,6 +607,24 @@ class ApplicationDeploymentJob implements ShouldQueue, ShouldBeEncrypted
         $this->rolling_update();
     }
 
+    private function framework_based_notification()
+    {
+        // Laravel old env variables
+        if ($this->pull_request_id === 0) {
+            $nixpacks_php_fallback_path = $this->application->environment_variables->where('key', 'NIXPACKS_PHP_FALLBACK_PATH')->first();
+            $nixpacks_php_root_dir = $this->application->environment_variables->where('key', 'NIXPACKS_PHP_ROOT_DIR')->first();
+        } else {
+            $nixpacks_php_fallback_path = $this->application->environment_variables_preview->where('key', 'NIXPACKS_PHP_FALLBACK_PATH')->first();
+            $nixpacks_php_root_dir = $this->application->environment_variables_preview->where('key', 'NIXPACKS_PHP_ROOT_DIR')->first();
+        }
+        if ($nixpacks_php_fallback_path?->value === '/index.php' && $nixpacks_php_root_dir?->value === '/app/public' && $this->newVersionIsHealthy === false) {
+            $this->execute_remote_command(
+                [
+                    "echo 'There was a change in how Laravel is deployed. Please update your environment variables to match the new deployment method. More details here: https://coolify.io/docs/frameworks/laravel#requirements'", 'type' => 'err'
+                ],
+            );
+        }
+    }
     private function rolling_update()
     {
         if ($this->server->isSwarm()) {
@@ -637,6 +661,7 @@ class ApplicationDeploymentJob implements ShouldQueue, ShouldBeEncrypted
                 $this->application_deployment_queue->addLogEntry("Rolling update completed.");
             }
         }
+        $this->framework_based_notification();
     }
     private function health_check()
     {
@@ -676,7 +701,7 @@ class ApplicationDeploymentJob implements ShouldQueue, ShouldBeEncrypted
                             "echo 'Attempt {$counter} of {$this->application->health_check_retries} | Healthcheck status: {$this->saved_outputs->get('health_check')}'"
                         ],
                     );
-                    if (Str::of($this->saved_outputs->get('health_check'))->contains('healthy')) {
+                    if (Str::of($this->saved_outputs->get('health_check'))->replace('"', '')->value() === 'healthy') {
                         $this->newVersionIsHealthy = true;
                         $this->application->update(['status' => 'running']);
                         $this->execute_remote_command(
@@ -686,6 +711,10 @@ class ApplicationDeploymentJob implements ShouldQueue, ShouldBeEncrypted
                         );
                         break;
                     }
+                    if (Str::of($this->saved_outputs->get('health_check'))->replace('"', '')->value() === 'unhealthy') {
+                        $this->newVersionIsHealthy = false;
+                        break;
+                    }
                     $counter++;
                     sleep($this->application->health_check_interval);
                 }
@@ -870,20 +899,28 @@ class ApplicationDeploymentJob implements ShouldQueue, ShouldBeEncrypted
             [
                 "echo -n 'Generating nixpacks configuration with: $nixpacks_command'",
             ],
-            [executeInDocker($this->deployment_uuid, $nixpacks_command)],
-            [executeInDocker($this->deployment_uuid, "cp {$this->workdir}/.nixpacks/Dockerfile {$this->workdir}/Dockerfile")],
-            [executeInDocker($this->deployment_uuid, "rm -f {$this->workdir}/.nixpacks/Dockerfile")]
+            [executeInDocker($this->deployment_uuid, $nixpacks_command), "save" => "nixpacks_plan", "hidden" => true],
+            [executeInDocker($this->deployment_uuid, "nixpacks detect {$this->workdir}"), "save" => "nixpacks_type", "hidden" => true],
         );
+        if ($this->saved_outputs->get('nixpacks_type')) {
+            $this->nixpacks_type = $this->saved_outputs->get('nixpacks_type');
+        }
+        if ($this->saved_outputs->get('nixpacks_plan')) {
+            $this->nixpacks_plan = $this->saved_outputs->get('nixpacks_plan');
+            if ($this->nixpacks_plan) {
+                $parsed = Toml::Parse($this->nixpacks_plan);
+                // Do any modifications here
+                $cmds = collect(data_get($parsed, 'phases.setup.cmds', []));
+                data_set($parsed, 'phases.setup.cmds', $cmds);
+                $this->nixpacks_plan = json_encode($parsed);
+            }
+        }
     }
 
     private function nixpacks_build_cmd()
     {
         $this->generate_env_variables();
-        // $cacheKey = $this->application->uuid;
-        // if ($this->pull_request_id !== 0) {
-            // $cacheKey = "{$this->application->uuid}-pr-{$this->pull_request_id}";
-        // }
-        $nixpacks_command = "nixpacks build {$this->env_args} --no-error-without-start";
+        $nixpacks_command = "nixpacks plan -f toml {$this->env_args}";
         if ($this->application->build_command) {
             $nixpacks_command .= " --build-cmd \"{$this->application->build_command}\"";
         }
@@ -893,7 +930,7 @@ class ApplicationDeploymentJob implements ShouldQueue, ShouldBeEncrypted
         if ($this->application->install_command) {
             $nixpacks_command .= " --install-cmd \"{$this->application->install_command}\"";
         }
-        $nixpacks_command .= " -o {$this->workdir} {$this->workdir}";
+        $nixpacks_command .= " {$this->workdir}";
         return $nixpacks_command;
     }
 
@@ -904,10 +941,16 @@ class ApplicationDeploymentJob implements ShouldQueue, ShouldBeEncrypted
             foreach ($this->application->nixpacks_environment_variables as $env) {
                 $this->env_args->push("--env {$env->key}={$env->value}");
             }
+            foreach ($this->application->build_environment_variables as $env) {
+                $this->env_args->push("--env {$env->key}={$env->value}");
+            }
         } else {
             foreach ($this->application->nixpacks_environment_variables_preview as $env) {
                 $this->env_args->push("--env {$env->key}={$env->value}");
             }
+            foreach ($this->application->build_environment_variables_preview as $env) {
+                $this->env_args->push("--env {$env->key}={$env->value}");
+            }
         }
 
         $this->env_args = $this->env_args->implode(' ');
@@ -1231,22 +1274,28 @@ COPY ./nginx.conf /etc/nginx/conf.d/default.conf");
             }");
             } else {
                 if ($this->application->build_pack === 'nixpacks') {
-                    $this->execute_remote_command(
-                        [
-                            executeInDocker($this->deployment_uuid, "cp {$this->workdir}/Dockerfile {$this->workdir}/.nixpacks/Dockerfile")
-                        ],
-                    );
-                }
-                if ($this->force_rebuild) {
-                    $this->execute_remote_command([
-                        executeInDocker($this->deployment_uuid, "docker build --no-cache $this->buildTarget $this->addHosts --network host -f {$this->workdir}{$this->dockerfile_location} {$this->build_args} --progress plain -t $this->build_image_name {$this->workdir}"), "hidden" => true
-                    ]);
+                    $this->nixpacks_plan = base64_encode($this->nixpacks_plan);
+                    $this->execute_remote_command([executeInDocker($this->deployment_uuid, "echo '{$this->nixpacks_plan}' | base64 -d > {$this->workdir}/thegameplan.json"), "hidden" => true]);
+                    if ($this->force_rebuild) {
+                        $this->execute_remote_command([
+                            executeInDocker($this->deployment_uuid, "nixpacks build -c thegameplan.json --no-cache --no-error-without-start -n {$this->build_image_name} {$this->workdir}"), "hidden" => true
+                        ]);
+                    } else {
+                        $this->execute_remote_command([
+                            executeInDocker($this->deployment_uuid, "nixpacks build -c thegameplan.json --cache-key '{$this->application->uuid}' --no-error-without-start -n {$this->build_image_name} {$this->workdir}"), "hidden" => true
+                        ]);
+                    }
                 } else {
-                    $this->execute_remote_command([
-                        executeInDocker($this->deployment_uuid, "docker build $this->buildTarget $this->addHosts --network host -f {$this->workdir}{$this->dockerfile_location} {$this->build_args} --progress plain -t $this->build_image_name {$this->workdir}"), "hidden" => true
-                    ]);
+                    if ($this->force_rebuild) {
+                        $this->execute_remote_command([
+                            executeInDocker($this->deployment_uuid, "docker build --no-cache {$this->buildTarget} --network {$this->destination->network} -f {$this->workdir}{$this->dockerfile_location} {$this->build_args} --progress plain -t $this->build_image_name {$this->workdir}"), "hidden" => true
+                        ]);
+                    } else {
+                        $this->execute_remote_command([
+                            executeInDocker($this->deployment_uuid, "docker build {$this->buildTarget} --network {$this->destination->network} -f {$this->workdir}{$this->dockerfile_location} {$this->build_args} --progress plain -t $this->build_image_name {$this->workdir}"), "hidden" => true
+                        ]);
+                    }
                 }
-                // }
 
                 $dockerfile = base64_encode("FROM {$this->application->static_image}
 WORKDIR /usr/share/nginx/html/
@@ -1279,32 +1328,38 @@ COPY ./nginx.conf /etc/nginx/conf.d/default.conf");
                     executeInDocker($this->deployment_uuid, "echo '{$nginx_config}' | base64 -d > {$this->workdir}/nginx.conf")
                 ],
                 [
-                    executeInDocker($this->deployment_uuid, "docker build $this->addHosts --network host -f {$this->workdir}/Dockerfile {$this->build_args} --progress plain -t $this->production_image_name {$this->workdir}"), "hidden" => true
+                    executeInDocker($this->deployment_uuid, "docker build {$this->addHosts} --network host -f {$this->workdir}/Dockerfile {$this->build_args} --progress plain -t {$this->production_image_name} {$this->workdir}"), "hidden" => true
                 ]
             );
         } else {
             // Pure Dockerfile based deployment
             if ($this->application->dockerfile) {
                 $this->execute_remote_command([
-                    executeInDocker($this->deployment_uuid, "docker build --pull $this->buildTarget $this->addHosts --network host -f {$this->workdir}{$this->dockerfile_location} {$this->build_args} --progress plain -t $this->production_image_name {$this->workdir}"), "hidden" => true
+                    executeInDocker($this->deployment_uuid, "docker build --pull {$this->buildTarget} {$this->addHosts} --network host -f {$this->workdir}{$this->dockerfile_location} {$this->build_args} --progress plain -t {$this->production_image_name} {$this->workdir}"), "hidden" => true
                 ]);
             } else {
                 if ($this->application->build_pack === 'nixpacks') {
-                    $this->execute_remote_command(
-                        [
-                            executeInDocker($this->deployment_uuid, "cp {$this->workdir}/Dockerfile {$this->workdir}/.nixpacks/Dockerfile")
-                        ],
-                    );
-                }
-
-                if ($this->force_rebuild) {
-                    $this->execute_remote_command([
-                        executeInDocker($this->deployment_uuid, "docker build --no-cache $this->buildTarget $this->addHosts --network host -f {$this->workdir}{$this->dockerfile_location} {$this->build_args} --progress plain -t $this->production_image_name {$this->workdir}"), "hidden" => true
-                    ]);
+                    $this->nixpacks_plan = base64_encode($this->nixpacks_plan);
+                    $this->execute_remote_command([executeInDocker($this->deployment_uuid, "echo '{$this->nixpacks_plan}' | base64 -d > {$this->workdir}/thegameplan.json"), "hidden" => true]);
+                    if ($this->force_rebuild) {
+                        $this->execute_remote_command([
+                            executeInDocker($this->deployment_uuid, "nixpacks build -c thegameplan.json --no-cache --no-error-without-start -n {$this->production_image_name} {$this->workdir}"), "hidden" => true
+                        ]);
+                    } else {
+                        $this->execute_remote_command([
+                            executeInDocker($this->deployment_uuid, "nixpacks build -c thegameplan.json --cache-key '{$this->application->uuid}' --no-error-without-start -n {$this->production_image_name} {$this->workdir}"), "hidden" => true
+                        ]);
+                    }
                 } else {
-                    $this->execute_remote_command([
-                        executeInDocker($this->deployment_uuid, "docker build $this->buildTarget $this->addHosts --network host -f {$this->workdir}{$this->dockerfile_location} {$this->build_args} --progress plain -t $this->production_image_name {$this->workdir}"), "hidden" => true
-                    ]);
+                    if ($this->force_rebuild) {
+                        $this->execute_remote_command([
+                            executeInDocker($this->deployment_uuid, "docker build --no-cache {$this->buildTarget} {$this->addHosts} --network host -f {$this->workdir}{$this->dockerfile_location} {$this->build_args} --progress plain -t {$this->production_image_name} {$this->workdir}"), "hidden" => true
+                        ]);
+                    } else {
+                        $this->execute_remote_command([
+                            executeInDocker($this->deployment_uuid, "docker build  {$this->buildTarget} {$this->addHosts} --network host -f {$this->workdir}{$this->dockerfile_location} {$this->build_args} --progress plain -t {$this->production_image_name} {$this->workdir}"), "hidden" => true
+                        ]);
+                    }
                 }
             }
         }
diff --git a/app/Jobs/ContainerStatusJob.php b/app/Jobs/ContainerStatusJob.php
index 16d0efa20..c28e266dd 100644
--- a/app/Jobs/ContainerStatusJob.php
+++ b/app/Jobs/ContainerStatusJob.php
@@ -162,6 +162,10 @@ class ContainerStatusJob implements ShouldQueue, ShouldBeEncrypted
                             // Notify user that this container should not be there.
                         }
                     }
+                    if (data_get($container,'Name') === '/coolify-db') {
+                        $foundDatabases[] = 0;
+                    }
+
                 }
                 $serviceLabelId = data_get($labels, 'coolify.serviceId');
                 if ($serviceLabelId) {
@@ -212,7 +216,7 @@ class ContainerStatusJob implements ShouldQueue, ShouldBeEncrypted
                 }
                 $name = data_get($exitedService, 'name');
                 $fqdn = data_get($exitedService, 'fqdn');
-                $containerName = $name ? "$name ($fqdn)" : $fqdn;
+                $containerName = $name ? "$name, available at $fqdn" : $fqdn;
                 $projectUuid = data_get($service, 'environment.project.uuid');
                 $serviceUuid = data_get($service, 'uuid');
                 $environmentName = data_get($service, 'environment.name');
diff --git a/app/Livewire/Boarding/Index.php b/app/Livewire/Boarding/Index.php
index 9c59f66ab..cc282d4c0 100644
--- a/app/Livewire/Boarding/Index.php
+++ b/app/Livewire/Boarding/Index.php
@@ -274,7 +274,7 @@ uZx9iFkCELtxrh31QJ68AAAAEXNhaWxANzZmZjY2ZDJlMmRkAQIDBA==
     {
         $this->skipBoarding();
         return redirect()->route(
-            'project.resources.new',
+            'project.resource.create',
             [
                 'project_uuid' => $this->createdProject->uuid,
                 'environment_name' => 'production',
diff --git a/app/Livewire/CommandCenter/Index.php b/app/Livewire/CommandCenter/Index.php
new file mode 100644
index 000000000..fd6bb7ed6
--- /dev/null
+++ b/app/Livewire/CommandCenter/Index.php
@@ -0,0 +1,18 @@
+servers = Server::isReachable()->get();
+    }
+    public function render()
+    {
+        return view('livewire.command-center.index');
+    }
+}
diff --git a/app/Livewire/ForcePasswordReset.php b/app/Livewire/ForcePasswordReset.php
index e5a9a079a..7bbec9d32 100644
--- a/app/Livewire/ForcePasswordReset.php
+++ b/app/Livewire/ForcePasswordReset.php
@@ -22,6 +22,10 @@ class ForcePasswordReset extends Component
     {
         $this->email = auth()->user()->email;
     }
+    public function render()
+    {
+        return view('livewire.force-password-reset')->layout('layouts.simple');
+    }
     public function submit()
     {
         try {
diff --git a/app/Livewire/Profile/Form.php b/app/Livewire/Profile/Index.php
similarity index 85%
rename from app/Livewire/Profile/Form.php
rename to app/Livewire/Profile/Index.php
index 3d395bf8f..0a2a34766 100644
--- a/app/Livewire/Profile/Form.php
+++ b/app/Livewire/Profile/Index.php
@@ -5,21 +5,19 @@ namespace App\Livewire\Profile;
 use Livewire\Attributes\Validate;
 use Livewire\Component;
 
-class Form extends Component
+class Index extends Component
 {
     public int $userId;
     public string $email;
 
     #[Validate('required')]
     public string $name;
-
     public function mount()
     {
         $this->userId = auth()->user()->id;
         $this->name = auth()->user()->name;
         $this->email = auth()->user()->email;
     }
-
     public function submit()
 
     {
@@ -34,4 +32,8 @@ class Form extends Component
             return handleError($e, $this);
         }
     }
+    public function render()
+    {
+        return view('livewire.profile.index');
+    }
 }
diff --git a/app/Livewire/Project/AddEnvironment.php b/app/Livewire/Project/AddEnvironment.php
index be80c21e1..c28cafd16 100644
--- a/app/Livewire/Project/AddEnvironment.php
+++ b/app/Livewire/Project/AddEnvironment.php
@@ -27,7 +27,7 @@ class AddEnvironment extends Component
                 'project_id' => $this->project->id,
             ]);
 
-            return redirect()->route('project.resources', [
+            return redirect()->route('project.resource.index', [
                 'project_uuid' => $this->project->uuid,
                 'environment_name' => $environment->name,
             ]);
diff --git a/app/Livewire/Project/Application/Configuration.php b/app/Livewire/Project/Application/Configuration.php
index 691cbb7c4..b095ab54d 100644
--- a/app/Livewire/Project/Application/Configuration.php
+++ b/app/Livewire/Project/Application/Configuration.php
@@ -4,13 +4,14 @@ namespace App\Livewire\Project\Application;
 
 use App\Models\Application;
 use App\Models\Server;
-use App\Models\StandaloneDocker;
 use Livewire\Component;
 
 class Configuration extends Component
 {
     public Application $application;
     public $servers;
+    protected $listeners = ['build_pack_updated' => '$refresh'];
+
     public function mount()
     {
         $project = currentTeam()->load(['projects'])->projects->where('uuid', request()->route('project_uuid'))->first();
diff --git a/app/Livewire/Project/Application/Deployments.php b/app/Livewire/Project/Application/Deployment/Index.php
similarity index 56%
rename from app/Livewire/Project/Application/Deployments.php
rename to app/Livewire/Project/Application/Deployment/Index.php
index 241167a8f..9d07550f4 100644
--- a/app/Livewire/Project/Application/Deployments.php
+++ b/app/Livewire/Project/Application/Deployment/Index.php
@@ -1,15 +1,15 @@
 load(['projects'])->projects->where('uuid', request()->route('project_uuid'))->first();
+        if (!$project) {
+            return redirect()->route('dashboard');
+        }
+        $environment = $project->load(['environments'])->environments->where('name', request()->route('environment_name'))->first()->load(['applications']);
+        if (!$environment) {
+            return redirect()->route('dashboard');
+        }
+        $application = $environment->applications->where('uuid', request()->route('application_uuid'))->first();
+        if (!$application) {
+            return redirect()->route('dashboard');
+        }
+        ['deployments' => $deployments, 'count' => $count] = $application->deployments(0, 40);
+        $this->application = $application;
+        $this->deployments = $deployments;
+        $this->deployments_count = $count;
         $this->current_url = url()->current();
         $this->show_pull_request_only();
         $this->show_more();
     }
-    private function show_pull_request_only() {
+    private function show_pull_request_only()
+    {
         if ($this->pull_request_id) {
             $this->deployments = $this->deployments->where('pull_request_id', $this->pull_request_id);
         }
@@ -57,4 +74,8 @@ class Deployments extends Component
         $this->show_pull_request_only();
         $this->show_more();
     }
+    public function render()
+    {
+        return view('livewire.project.application.deployment.index');
+    }
 }
diff --git a/app/Http/Controllers/ApplicationController.php b/app/Livewire/Project/Application/Deployment/Show.php
similarity index 52%
rename from app/Http/Controllers/ApplicationController.php
rename to app/Livewire/Project/Application/Deployment/Show.php
index 12411d3fd..b83c3f3af 100644
--- a/app/Http/Controllers/ApplicationController.php
+++ b/app/Livewire/Project/Application/Deployment/Show.php
@@ -1,35 +1,20 @@
 load(['projects'])->projects->where('uuid', request()->route('project_uuid'))->first();
-        if (!$project) {
-            return redirect()->route('dashboard');
-        }
-        $environment = $project->load(['environments'])->environments->where('name', request()->route('environment_name'))->first()->load(['applications']);
-        if (!$environment) {
-            return redirect()->route('dashboard');
-        }
-        $application = $environment->applications->where('uuid', request()->route('application_uuid'))->first();
-        if (!$application) {
-            return redirect()->route('dashboard');
-        }
-        ['deployments' => $deployments, 'count' => $count] = $application->deployments(0, 40);
-        return view('project.application.deployments', ['application' => $application, 'deployments' => $deployments, 'deployments_count' => $count]);
-    }
-
-    public function deployment()
-    {
+    public function mount() {
         $deploymentUuid = request()->route('deployment_uuid');
 
         $project = currentTeam()->load(['projects'])->projects->where('uuid', request()->route('project_uuid'))->first();
@@ -46,7 +31,7 @@ class ApplicationController extends Controller
         }
         // $activity = Activity::where('properties->type_uuid', '=', $deploymentUuid)->first();
         // if (!$activity) {
-        //     return redirect()->route('project.application.deployments', [
+        //     return redirect()->route('project.application.deployment.index', [
         //         'project_uuid' => $project->uuid,
         //         'environment_name' => $environment->name,
         //         'application_uuid' => $application->uuid,
@@ -54,17 +39,32 @@ class ApplicationController extends Controller
         // }
         $application_deployment_queue = ApplicationDeploymentQueue::where('deployment_uuid', $deploymentUuid)->first();
         if (!$application_deployment_queue) {
-            return redirect()->route('project.application.deployments', [
+            return redirect()->route('project.application.deployment.index', [
                 'project_uuid' => $project->uuid,
                 'environment_name' => $environment->name,
                 'application_uuid' => $application->uuid,
             ]);
         }
-        return view('project.application.deployment', [
-            'application' => $application,
-            // 'activity' => $activity,
-            'application_deployment_queue' => $application_deployment_queue,
-            'deployment_uuid' => $deploymentUuid,
-        ]);
+        $this->application = $application;
+        $this->application_deployment_queue = $application_deployment_queue;
+        $this->deployment_uuid = $deploymentUuid;
+    }
+
+    public function refreshQueue()
+    {
+        $this->application_deployment_queue->refresh();
+    }
+
+    public function polling()
+    {
+        $this->dispatch('deploymentFinished');
+        $this->application_deployment_queue->refresh();
+        if (data_get($this->application_deployment_queue, 'status') == 'finished' || data_get($this->application_deployment_queue, 'status') == 'failed') {
+            $this->isKeepAliveOn = false;
+        }
+    }
+    public function render()
+    {
+        return view('livewire.project.application.deployment.show');
     }
 }
diff --git a/app/Livewire/Project/Application/DeploymentLogs.php b/app/Livewire/Project/Application/DeploymentLogs.php
deleted file mode 100644
index d2d07035d..000000000
--- a/app/Livewire/Project/Application/DeploymentLogs.php
+++ /dev/null
@@ -1,27 +0,0 @@
-application_deployment_queue->refresh();
-    }
-
-    public function polling()
-    {
-        $this->dispatch('deploymentFinished');
-        $this->application_deployment_queue->refresh();
-        if (data_get($this->application_deployment_queue, 'status') == 'finished' || data_get($this->application_deployment_queue, 'status') == 'failed') {
-            $this->isKeepAliveOn = false;
-        }
-    }
-}
diff --git a/app/Livewire/Project/Application/General.php b/app/Livewire/Project/Application/General.php
index f54a46e09..0c5828af3 100644
--- a/app/Livewire/Project/Application/General.php
+++ b/app/Livewire/Project/Application/General.php
@@ -165,12 +165,20 @@ class General extends Component
         if ($this->application->build_pack !== 'nixpacks') {
             $this->application->settings->is_static = false;
             $this->application->settings->save();
+        } else {
+            $this->application->ports_exposes = $this->ports_exposes = 3000;
+            $this->resetDefaultLabels(false);
         }
         if ($this->application->build_pack === 'dockercompose') {
             $this->application->fqdn = null;
             $this->application->settings->save();
         }
+        if ($this->application->build_pack === 'static') {
+            $this->application->ports_exposes = $this->ports_exposes = 80;
+            $this->resetDefaultLabels(false);
+        }
         $this->submit();
+        $this->dispatch('build_pack_updated');
     }
     public function checkLabelUpdates()
     {
@@ -201,7 +209,7 @@ class General extends Component
     public function updatedApplicationFqdn()
     {
         $this->resetDefaultLabels(false);
-        $this->dispatch('success', 'Labels reseted to default!');
+        $this->dispatch('success', 'Labels reset to default!');
     }
     public function submit($showToaster = true)
     {
diff --git a/app/Livewire/Project/Application/Heading.php b/app/Livewire/Project/Application/Heading.php
index f6bf4852b..a8a5f7d27 100644
--- a/app/Livewire/Project/Application/Heading.php
+++ b/app/Livewire/Project/Application/Heading.php
@@ -39,7 +39,7 @@ class Heading extends Component
         } else {
             dispatch(new ServerStatusJob($this->application->destination->server));
         }
-        if ($showNotification) $this->dispatch('success', 'Application status updated.');
+        if ($showNotification) $this->dispatch('success', "Application ({$this->application->name}) status updated.");
     }
 
     public function force_deploy_without_cache()
@@ -60,7 +60,7 @@ class Heading extends Component
             force_rebuild: false,
             is_new_deployment: true,
         );
-        return redirect()->route('project.application.deployment', [
+        return redirect()->route('project.application.deployment.show', [
             'project_uuid' => $this->parameters['project_uuid'],
             'application_uuid' => $this->parameters['application_uuid'],
             'deployment_uuid' => $this->deploymentUuid,
@@ -83,7 +83,7 @@ class Heading extends Component
             deployment_uuid: $this->deploymentUuid,
             force_rebuild: $force_rebuild,
         );
-        return redirect()->route('project.application.deployment', [
+        return redirect()->route('project.application.deployment.show', [
             'project_uuid' => $this->parameters['project_uuid'],
             'application_uuid' => $this->parameters['application_uuid'],
             'deployment_uuid' => $this->deploymentUuid,
@@ -113,7 +113,7 @@ class Heading extends Component
             restart_only: true,
             is_new_deployment: true,
         );
-        return redirect()->route('project.application.deployment', [
+        return redirect()->route('project.application.deployment.show', [
             'project_uuid' => $this->parameters['project_uuid'],
             'application_uuid' => $this->parameters['application_uuid'],
             'deployment_uuid' => $this->deploymentUuid,
@@ -128,7 +128,7 @@ class Heading extends Component
             deployment_uuid: $this->deploymentUuid,
             restart_only: true,
         );
-        return redirect()->route('project.application.deployment', [
+        return redirect()->route('project.application.deployment.show', [
             'project_uuid' => $this->parameters['project_uuid'],
             'application_uuid' => $this->parameters['application_uuid'],
             'deployment_uuid' => $this->deploymentUuid,
diff --git a/app/Livewire/Project/Application/Previews.php b/app/Livewire/Project/Application/Previews.php
index 91a28c994..dffb9461c 100644
--- a/app/Livewire/Project/Application/Previews.php
+++ b/app/Livewire/Project/Application/Previews.php
@@ -52,7 +52,7 @@ class Previews extends Component
                 force_rebuild: true,
                 pull_request_id: $pull_request_id,
             );
-            return redirect()->route('project.application.deployment', [
+            return redirect()->route('project.application.deployment.show', [
                 'project_uuid' => $this->parameters['project_uuid'],
                 'application_uuid' => $this->parameters['application_uuid'],
                 'deployment_uuid' => $this->deployment_uuid,
diff --git a/app/Livewire/Project/Application/Rollback.php b/app/Livewire/Project/Application/Rollback.php
index 64d83a5be..a26d5cd47 100644
--- a/app/Livewire/Project/Application/Rollback.php
+++ b/app/Livewire/Project/Application/Rollback.php
@@ -29,7 +29,7 @@ class Rollback extends Component
             commit: $commit,
             force_rebuild: false,
         );
-        return redirect()->route('project.application.deployment', [
+        return redirect()->route('project.application.deployment.show', [
             'project_uuid' => $this->parameters['project_uuid'],
             'application_uuid' => $this->parameters['application_uuid'],
             'deployment_uuid' => $deployment_uuid,
diff --git a/app/Livewire/Project/CloneProject.php b/app/Livewire/Project/CloneMe.php
similarity index 97%
rename from app/Livewire/Project/CloneProject.php
rename to app/Livewire/Project/CloneMe.php
index 2dea157a2..993c9516c 100644
--- a/app/Livewire/Project/CloneProject.php
+++ b/app/Livewire/Project/CloneMe.php
@@ -8,7 +8,7 @@ use App\Models\Server;
 use Livewire\Component;
 use Visus\Cuid2\Cuid2;
 
-class CloneProject extends Component
+class CloneMe extends Component
 {
     public string $project_uuid;
     public string $environment_name;
@@ -41,7 +41,7 @@ class CloneProject extends Component
 
     public function render()
     {
-        return view('livewire.project.clone-project');
+        return view('livewire.project.clone-me');
     }
 
     public function selectServer($server_id, $destination_id)
@@ -152,7 +152,7 @@ class CloneProject extends Component
                 }
                 $newService->parse();
             }
-            return redirect()->route('project.resources', [
+            return redirect()->route('project.resource.index', [
                 'project_uuid' => $newProject->uuid,
                 'environment_name' => $newEnvironment->name,
             ]);
diff --git a/app/Livewire/Project/Database/Backup/Execution.php b/app/Livewire/Project/Database/Backup/Execution.php
new file mode 100644
index 000000000..07f7db03c
--- /dev/null
+++ b/app/Livewire/Project/Database/Backup/Execution.php
@@ -0,0 +1,41 @@
+route('backup_uuid');
+        $project = currentTeam()->load(['projects'])->projects->where('uuid', request()->route('project_uuid'))->first();
+        if (!$project) {
+            return redirect()->route('dashboard');
+        }
+        $environment = $project->load(['environments'])->environments->where('name', request()->route('environment_name'))->first()->load(['applications']);
+        if (!$environment) {
+            return redirect()->route('dashboard');
+        }
+        $database = $environment->databases()->where('uuid', request()->route('database_uuid'))->first();
+        if (!$database) {
+            return redirect()->route('dashboard');
+        }
+        $backup = $database->scheduledBackups->where('uuid', $backup_uuid)->first();
+        if (!$backup) {
+            return redirect()->route('dashboard');
+        }
+        $executions = collect($backup->executions)->sortByDesc('created_at');
+        $this->database = $database;
+        $this->backup = $backup;
+        $this->executions = $executions;
+        $this->s3s = currentTeam()->s3s;
+    }
+    public function render()
+    {
+        return view('livewire.project.database.backup.execution');
+    }
+}
diff --git a/app/Livewire/Project/Database/Backup/Index.php b/app/Livewire/Project/Database/Backup/Index.php
new file mode 100644
index 000000000..6211a0e47
--- /dev/null
+++ b/app/Livewire/Project/Database/Backup/Index.php
@@ -0,0 +1,39 @@
+load(['projects'])->projects->where('uuid', request()->route('project_uuid'))->first();
+        if (!$project) {
+            return redirect()->route('dashboard');
+        }
+        $environment = $project->load(['environments'])->environments->where('name', request()->route('environment_name'))->first()->load(['applications']);
+        if (!$environment) {
+            return redirect()->route('dashboard');
+        }
+        $database = $environment->databases()->where('uuid', request()->route('database_uuid'))->first();
+        if (!$database) {
+            return redirect()->route('dashboard');
+        }
+        // No backups for redis
+        if ($database->getMorphClass() === 'App\Models\StandaloneRedis') {
+            return redirect()->route('project.database.configuration', [
+                'project_uuid' => $project->uuid,
+                'environment_name' => $environment->name,
+                'database_uuid' => $database->uuid,
+            ]);
+        }
+        $this->database = $database;
+        $this->s3s = currentTeam()->s3s;
+    }
+    public function render()
+    {
+        return view('livewire.project.database.backup.index');
+    }
+}
diff --git a/app/Livewire/Project/Database/BackupEdit.php b/app/Livewire/Project/Database/BackupEdit.php
index e8e763c73..86aec0f6a 100644
--- a/app/Livewire/Project/Database/BackupEdit.php
+++ b/app/Livewire/Project/Database/BackupEdit.php
@@ -52,7 +52,7 @@ class BackupEdit extends Component
             $url = $url->getPath() .  "#{$url->getFragment()}";
             return redirect($url);
         } else {
-            return redirect()->route('project.database.backups.all', $this->parameters);
+            return redirect()->route('project.database.backup.index', $this->parameters);
         }
 
     }
diff --git a/app/Livewire/Project/Database/Configuration.php b/app/Livewire/Project/Database/Configuration.php
new file mode 100644
index 000000000..c988477de
--- /dev/null
+++ b/app/Livewire/Project/Database/Configuration.php
@@ -0,0 +1,29 @@
+load(['projects'])->projects->where('uuid', request()->route('project_uuid'))->first();
+        if (!$project) {
+            return redirect()->route('dashboard');
+        }
+        $environment = $project->load(['environments'])->environments->where('name', request()->route('environment_name'))->first()->load(['applications']);
+        if (!$environment) {
+            return redirect()->route('dashboard');
+        }
+        $database = $environment->databases()->where('uuid', request()->route('database_uuid'))->first();
+        if (!$database) {
+            return redirect()->route('dashboard');
+        }
+        $this->database = $database;
+    }
+    public function render()
+    {
+        return view('livewire.project.database.configuration');
+    }
+}
diff --git a/app/Livewire/Project/DeleteProject.php b/app/Livewire/Project/DeleteProject.php
index 23ca8eb79..7ac4aa281 100644
--- a/app/Livewire/Project/DeleteProject.php
+++ b/app/Livewire/Project/DeleteProject.php
@@ -25,6 +25,6 @@ class DeleteProject extends Component
             return $this->dispatch('error', 'Project has resources defined, please delete them first.');
         }
         $project->delete();
-        return redirect()->route('projects');
+        return redirect()->route('project.index');
     }
 }
diff --git a/app/Livewire/Project/Edit.php b/app/Livewire/Project/Edit.php
index d08aa3e59..e674e3dd9 100644
--- a/app/Livewire/Project/Edit.php
+++ b/app/Livewire/Project/Edit.php
@@ -12,6 +12,15 @@ class Edit extends Component
         'project.name' => 'required|min:3|max:255',
         'project.description' => 'nullable|string|max:255',
     ];
+    public function mount() {
+        $projectUuid = request()->route('project_uuid');
+        $teamId = currentTeam()->id;
+        $project = Project::where('team_id', $teamId)->where('uuid', $projectUuid)->first();
+        if (!$project) {
+            return redirect()->route('dashboard');
+        }
+        $this->project = $project;
+    }
 
     public function submit()
     {
diff --git a/app/Livewire/Project/Index.php b/app/Livewire/Project/Index.php
new file mode 100644
index 000000000..1e6f79855
--- /dev/null
+++ b/app/Livewire/Project/Index.php
@@ -0,0 +1,21 @@
+projects = Project::ownedByCurrentTeam()->get();
+        $this->servers = Server::ownedByCurrentTeam()->count();
+    }
+    public function render()
+    {
+        return view('livewire.project.index');
+    }
+}
diff --git a/app/Livewire/Project/New/Select.php b/app/Livewire/Project/New/Select.php
index 47834a7fc..3133efc97 100644
--- a/app/Livewire/Project/New/Select.php
+++ b/app/Livewire/Project/New/Select.php
@@ -55,7 +55,7 @@ class Select extends Component
 
     public function updatedSelectedEnvironment()
     {
-        return redirect()->route('project.resources.new', [
+        return redirect()->route('project.resource.create', [
             'project_uuid' => $this->parameters['project_uuid'],
             'environment_name' => $this->selectedEnvironment,
         ]);
@@ -157,7 +157,7 @@ class Select extends Component
     public function setDestination(string $destination_uuid)
     {
         $this->destination_uuid = $destination_uuid;
-        return redirect()->route('project.resources.new', [
+        return redirect()->route('project.resource.create', [
             'project_uuid' => $this->parameters['project_uuid'],
             'environment_name' => $this->parameters['environment_name'],
             'type' => $this->type,
diff --git a/app/Http/Controllers/ProjectController.php b/app/Livewire/Project/Resource/Create.php
similarity index 63%
rename from app/Http/Controllers/ProjectController.php
rename to app/Livewire/Project/Resource/Create.php
index 1e7d6b9cd..db5dc03f4 100644
--- a/app/Http/Controllers/ProjectController.php
+++ b/app/Livewire/Project/Resource/Create.php
@@ -1,52 +1,18 @@
  Project::ownedByCurrentTeam()->get(),
-            'servers' => Server::ownedByCurrentTeam()->count(),
-        ]);
-    }
-
-    public function edit()
-    {
-        $projectUuid = request()->route('project_uuid');
-        $teamId = currentTeam()->id;
-        $project = Project::where('team_id', $teamId)->where('uuid', $projectUuid)->first();
-        if (!$project) {
-            return redirect()->route('dashboard');
-        }
-        return view('project.edit', ['project' => $project]);
-    }
-
-    public function show()
-    {
-        $projectUuid = request()->route('project_uuid');
-        $teamId = currentTeam()->id;
-
-        $project = Project::where('team_id', $teamId)->where('uuid', $projectUuid)->first();
-        if (!$project) {
-            return redirect()->route('dashboard');
-        }
-        $project->load(['environments']);
-        return view('project.show', ['project' => $project]);
-    }
-
-    public function new()
-    {
+    public $type;
+    public function mount() {
         $services = getServiceTemplates();
-        $type = Str::of(request()->query('type'));
+        $type = str(request()->query('type'));
         $destination_uuid = request()->query('destination');
         $server_id = request()->query('server_id');
 
@@ -81,14 +47,14 @@ class ProjectController extends Controller
             $oneClickService = data_get($services, "$oneClickServiceName.compose");
             $oneClickDotEnvs = data_get($services, "$oneClickServiceName.envs", null);
             if ($oneClickDotEnvs) {
-                $oneClickDotEnvs = Str::of(base64_decode($oneClickDotEnvs))->split('/\r\n|\r|\n/')->filter(function ($value) {
+                $oneClickDotEnvs = str(base64_decode($oneClickDotEnvs))->split('/\r\n|\r|\n/')->filter(function ($value) {
                     return !empty($value);
                 });
             }
             if ($oneClickService) {
                 $destination = StandaloneDocker::whereUuid($destination_uuid)->first();
                 $service = Service::create([
-                    'name' => "$oneClickServiceName-" . Str::random(10),
+                    'name' => "$oneClickServiceName-" . str()->random(10),
                     'docker_compose_raw' => base64_decode($oneClickService),
                     'environment_id' => $environment->id,
                     'server_id' => (int) $server_id,
@@ -99,8 +65,8 @@ class ProjectController extends Controller
                 $service->save();
                 if ($oneClickDotEnvs?->count() > 0) {
                     $oneClickDotEnvs->each(function ($value) use ($service) {
-                        $key = Str::before($value, '=');
-                        $value = Str::of(Str::after($value, '='));
+                        $key = str()->before($value, '=');
+                        $value = str(str()->after($value, '='));
                         $generatedValue = $value;
                         if ($value->contains('SERVICE_')) {
                             $command = $value->after('SERVICE_')->beforeLast('_');
@@ -123,24 +89,10 @@ class ProjectController extends Controller
                 ]);
             }
         }
-        return view('project.new', [
-            'type' => $type->value()
-        ]);
+        $this->type = $type->value();
     }
-
-    public function resources()
+    public function render()
     {
-        $project = currentTeam()->load(['projects'])->projects->where('uuid', request()->route('project_uuid'))->first();
-        if (!$project) {
-            return redirect()->route('dashboard');
-        }
-        $environment = $project->load(['environments'])->environments->where('name', request()->route('environment_name'))->first();
-        if (!$environment) {
-            return redirect()->route('dashboard');
-        }
-        return view('project.resources', [
-            'project' => $project,
-            'environment' => $environment
-        ]);
+        return view('livewire.project.resource.create');
     }
 }
diff --git a/app/Livewire/Project/Resource/Index.php b/app/Livewire/Project/Resource/Index.php
new file mode 100644
index 000000000..2a7570c9d
--- /dev/null
+++ b/app/Livewire/Project/Resource/Index.php
@@ -0,0 +1,29 @@
+load(['projects'])->projects->where('uuid', request()->route('project_uuid'))->first();
+        if (!$project) {
+            return redirect()->route('dashboard');
+        }
+        $environment = $project->load(['environments'])->environments->where('name', request()->route('environment_name'))->first();
+        if (!$environment) {
+            return redirect()->route('dashboard');
+        }
+        $this->project = $project;
+        $this->environment = $environment;
+    }
+    public function render()
+    {
+        return view('livewire.project.resource.index');
+    }
+}
diff --git a/app/Livewire/Project/Service/Configuration.php b/app/Livewire/Project/Service/Configuration.php
new file mode 100644
index 000000000..5954b3b36
--- /dev/null
+++ b/app/Livewire/Project/Service/Configuration.php
@@ -0,0 +1,54 @@
+user()->id;
+        return [
+            "echo-private:user.{$userId},ServiceStatusChanged" => 'checkStatus',
+            "refreshStacks",
+            "checkStatus",
+        ];
+    }
+    public function render()
+    {
+        return view('livewire.project.service.configuration');
+    }
+    public function mount()
+    {
+        $this->parameters = get_route_parameters();
+        $this->query = request()->query();
+        $this->service = Service::whereUuid($this->parameters['service_uuid'])->firstOrFail();
+        $this->applications = $this->service->applications->sort();
+        $this->databases = $this->service->databases->sort();
+    }
+    public function checkStatus()
+    {
+        dispatch_sync(new ContainerStatusJob($this->service->server));
+        $this->refreshStacks();
+        $this->dispatch('serviceStatusChanged');
+    }
+    public function refreshStacks()
+    {
+        $this->applications = $this->service->applications->sort();
+        $this->applications->each(function ($application) {
+            $application->refresh();
+        });
+        $this->databases = $this->service->databases->sort();
+        $this->databases->each(function ($database) {
+            $database->refresh();
+        });
+    }
+}
diff --git a/app/Livewire/Project/Service/Index.php b/app/Livewire/Project/Service/Index.php
index e55dc610c..21009cb44 100644
--- a/app/Livewire/Project/Service/Index.php
+++ b/app/Livewire/Project/Service/Index.php
@@ -2,53 +2,51 @@
 
 namespace App\Livewire\Project\Service;
 
-use App\Jobs\ContainerStatusJob;
 use App\Models\Service;
+use App\Models\ServiceApplication;
+use App\Models\ServiceDatabase;
+use Illuminate\Support\Collection;
 use Livewire\Component;
 
 class Index extends Component
 {
     public Service $service;
-    public $applications;
-    public $databases;
+    public ?ServiceApplication $serviceApplication = null;
+    public ?ServiceDatabase $serviceDatabase = null;
     public array $parameters;
     public array $query;
-    public function getListeners()
+    public Collection $services;
+    public $s3s;
+
+    protected $listeners = ['generateDockerCompose'];
+
+    public function mount()
     {
-        $userId = auth()->user()->id;
-        return [
-            "echo-private:user.{$userId},ServiceStatusChanged" => 'checkStatus',
-            "refreshStacks",
-            "checkStatus",
-        ];
+        try {
+            $this->services = collect([]);
+            $this->parameters = get_route_parameters();
+            $this->query = request()->query();
+            $this->service = Service::whereUuid($this->parameters['service_uuid'])->firstOrFail();
+            $service = $this->service->applications()->whereName($this->parameters['service_name'])->first();
+            if ($service) {
+                $this->serviceApplication = $service;
+                $this->serviceApplication->getFilesFromServer();
+            } else {
+                $this->serviceDatabase = $this->service->databases()->whereName($this->parameters['service_name'])->first();
+                $this->serviceDatabase->getFilesFromServer();
+            }
+            $this->s3s = currentTeam()->s3s;
+        } catch(\Throwable $e) {
+            return handleError($e, $this);
+        }
+
+    }
+    public function generateDockerCompose()
+    {
+        $this->service->parse();
     }
     public function render()
     {
         return view('livewire.project.service.index');
     }
-    public function mount()
-    {
-        $this->parameters = get_route_parameters();
-        $this->query = request()->query();
-        $this->service = Service::whereUuid($this->parameters['service_uuid'])->firstOrFail();
-        $this->applications = $this->service->applications->sort();
-        $this->databases = $this->service->databases->sort();
-    }
-    public function checkStatus()
-    {
-        dispatch_sync(new ContainerStatusJob($this->service->server));
-        $this->refreshStacks();
-        $this->dispatch('serviceStatusChanged');
-    }
-    public function refreshStacks()
-    {
-        $this->applications = $this->service->applications->sort();
-        $this->applications->each(function ($application) {
-            $application->refresh();
-        });
-        $this->databases = $this->service->databases->sort();
-        $this->databases->each(function ($database) {
-            $database->refresh();
-        });
-    }
 }
diff --git a/app/Livewire/Project/Service/Show.php b/app/Livewire/Project/Service/Show.php
deleted file mode 100644
index 272e0a399..000000000
--- a/app/Livewire/Project/Service/Show.php
+++ /dev/null
@@ -1,52 +0,0 @@
-services = collect([]);
-            $this->parameters = get_route_parameters();
-            $this->query = request()->query();
-            $this->service = Service::whereUuid($this->parameters['service_uuid'])->firstOrFail();
-            $service = $this->service->applications()->whereName($this->parameters['service_name'])->first();
-            if ($service) {
-                $this->serviceApplication = $service;
-                $this->serviceApplication->getFilesFromServer();
-            } else {
-                $this->serviceDatabase = $this->service->databases()->whereName($this->parameters['service_name'])->first();
-                $this->serviceDatabase->getFilesFromServer();
-            }
-            $this->s3s = currentTeam()->s3s;
-        } catch(\Throwable $e) {
-            return handleError($e, $this);
-        }
-
-    }
-    public function generateDockerCompose()
-    {
-        $this->service->parse();
-    }
-    public function render()
-    {
-        return view('livewire.project.service.show');
-    }
-}
diff --git a/app/Livewire/Project/Shared/Danger.php b/app/Livewire/Project/Shared/Danger.php
index 44a9d5cf3..37664c870 100644
--- a/app/Livewire/Project/Shared/Danger.php
+++ b/app/Livewire/Project/Shared/Danger.php
@@ -25,7 +25,7 @@ class Danger extends Component
     {
         try {
             DeleteResourceJob::dispatchSync($this->resource);
-            return redirect()->route('project.resources', [
+            return redirect()->route('project.resource.index', [
                 'project_uuid' => $this->projectUuid,
                 'environment_name' => $this->environmentName
             ]);
diff --git a/app/Livewire/Project/Shared/EnvironmentVariable/All.php b/app/Livewire/Project/Shared/EnvironmentVariable/All.php
index 7002fb989..77644519a 100644
--- a/app/Livewire/Project/Shared/EnvironmentVariable/All.php
+++ b/app/Livewire/Project/Shared/EnvironmentVariable/All.php
@@ -139,6 +139,18 @@ class All extends Component
                 case 'standalone-postgresql':
                     $environment->standalone_postgresql_id = $this->resource->id;
                     break;
+                case 'standalone-redis':
+                    $environment->standalone_redis_id = $this->resource->id;
+                    break;
+                case 'standalone-mongodb':
+                    $environment->standalone_mongodb_id = $this->resource->id;
+                    break;
+                case 'standalone-mysql':
+                    $environment->standalone_mysql_id = $this->resource->id;
+                    break;
+                case 'standalone-mariadb':
+                    $environment->standalone_mariadb_id = $this->resource->id;
+                    break;
                 case 'service':
                     $environment->service_id = $this->resource->id;
                     break;
diff --git a/app/Livewire/Project/Shared/ExecuteContainerCommand.php b/app/Livewire/Project/Shared/ExecuteContainerCommand.php
index a3a63c154..f06f7784d 100644
--- a/app/Livewire/Project/Shared/ExecuteContainerCommand.php
+++ b/app/Livewire/Project/Shared/ExecuteContainerCommand.php
@@ -10,7 +10,6 @@ use App\Models\StandaloneMongodb;
 use App\Models\StandaloneMysql;
 use App\Models\StandalonePostgresql;
 use App\Models\StandaloneRedis;
-use Illuminate\Support\Sleep;
 use Livewire\Component;
 
 class ExecuteContainerCommand extends Component
diff --git a/app/Livewire/Project/Show.php b/app/Livewire/Project/Show.php
new file mode 100644
index 000000000..0824ab32e
--- /dev/null
+++ b/app/Livewire/Project/Show.php
@@ -0,0 +1,26 @@
+route('project_uuid');
+        $teamId = currentTeam()->id;
+
+        $project = Project::where('team_id', $teamId)->where('uuid', $projectUuid)->first();
+        if (!$project) {
+            return redirect()->route('dashboard');
+        }
+        $project->load(['environments']);
+        $this->project = $project;
+    }
+    public function render()
+    {
+        return view('livewire.project.show');
+    }
+}
diff --git a/app/Livewire/PrivateKey/Create.php b/app/Livewire/Security/PrivateKey/Create.php
similarity index 98%
rename from app/Livewire/PrivateKey/Create.php
rename to app/Livewire/Security/PrivateKey/Create.php
index a82b6fb48..62d763601 100644
--- a/app/Livewire/PrivateKey/Create.php
+++ b/app/Livewire/Security/PrivateKey/Create.php
@@ -1,6 +1,6 @@
 private_key = PrivateKey::ownedByCurrentTeam(['name', 'description', 'private_key', 'is_git_related'])->whereUuid(request()->private_key_uuid)->firstOrFail();
             $this->public_key = $this->private_key->publicKey();
         }catch(\Throwable $e) {
             return handleError($e, $this);
diff --git a/app/Livewire/Server/Delete.php b/app/Livewire/Server/Delete.php
index 73edf5ffe..3333283eb 100644
--- a/app/Livewire/Server/Delete.php
+++ b/app/Livewire/Server/Delete.php
@@ -19,7 +19,7 @@ class Delete extends Component
                 return;
             }
             $this->server->delete();
-            return redirect()->route('server.all');
+            return redirect()->route('server.index');
         } catch (\Throwable $e) {
             return handleError($e, $this);
         }
diff --git a/app/Livewire/Server/Destination/Show.php b/app/Livewire/Server/Destination/Show.php
index 7fa2a2823..4e0f54296 100644
--- a/app/Livewire/Server/Destination/Show.php
+++ b/app/Livewire/Server/Destination/Show.php
@@ -15,7 +15,7 @@ class Show extends Component
         try {
             $this->server = Server::ownedByCurrentTeam()->whereUuid(request()->server_uuid)->first();
             if (is_null($this->server)) {
-                return redirect()->route('server.all');
+                return redirect()->route('server.index');
             }
         } catch (\Throwable $e) {
             return handleError($e, $this);
diff --git a/app/Livewire/Server/All.php b/app/Livewire/Server/Index.php
similarity index 80%
rename from app/Livewire/Server/All.php
rename to app/Livewire/Server/Index.php
index fad5f3fba..45bb1c3e1 100644
--- a/app/Livewire/Server/All.php
+++ b/app/Livewire/Server/Index.php
@@ -6,7 +6,7 @@ use App\Models\Server;
 use Illuminate\Database\Eloquent\Collection;
 use Livewire\Component;
 
-class All extends Component
+class Index extends Component
 {
     public ?Collection $servers = null;
 
@@ -15,6 +15,6 @@ class All extends Component
     }
     public function render()
     {
-        return view('livewire.server.all');
+        return view('livewire.server.index');
     }
 }
diff --git a/app/Livewire/Server/LogDrains.php b/app/Livewire/Server/LogDrains.php
index 902ec4b75..b922cc0c9 100644
--- a/app/Livewire/Server/LogDrains.php
+++ b/app/Livewire/Server/LogDrains.php
@@ -43,7 +43,7 @@ class LogDrains extends Component
         try {
             $server = Server::ownedByCurrentTeam()->whereUuid(request()->server_uuid)->first();
             if (is_null($server)) {
-                return redirect()->route('server.all');
+                return redirect()->route('server.index');
             }
             $this->server = $server;
         } catch (\Throwable $e) {
diff --git a/app/Livewire/Server/PrivateKey/Show.php b/app/Livewire/Server/PrivateKey/Show.php
index 9fa0acb75..71dea7c9d 100644
--- a/app/Livewire/Server/PrivateKey/Show.php
+++ b/app/Livewire/Server/PrivateKey/Show.php
@@ -17,7 +17,7 @@ class Show extends Component
         try {
             $this->server = Server::ownedByCurrentTeam()->whereUuid(request()->server_uuid)->first();
             if (is_null($this->server)) {
-                return redirect()->route('server.all');
+                return redirect()->route('server.index');
             }
             $this->privateKeys = PrivateKey::ownedByCurrentTeam()->get()->where('is_git_related', false);
         } catch (\Throwable $e) {
diff --git a/app/Livewire/Server/Proxy/Logs.php b/app/Livewire/Server/Proxy/Logs.php
index ed12f8c49..7949b0086 100644
--- a/app/Livewire/Server/Proxy/Logs.php
+++ b/app/Livewire/Server/Proxy/Logs.php
@@ -15,7 +15,7 @@ class Logs extends Component
         try {
             $this->server = Server::ownedByCurrentTeam()->whereUuid(request()->server_uuid)->first();
             if (is_null($this->server)) {
-                return redirect()->route('server.all');
+                return redirect()->route('server.index');
             }
         } catch (\Throwable $e) {
             return handleError($e, $this);
diff --git a/app/Livewire/Server/Proxy/Show.php b/app/Livewire/Server/Proxy/Show.php
index b1175d3b7..7e21e3344 100644
--- a/app/Livewire/Server/Proxy/Show.php
+++ b/app/Livewire/Server/Proxy/Show.php
@@ -20,7 +20,7 @@ class Show extends Component
         try {
             $this->server = Server::ownedByCurrentTeam()->whereUuid(request()->server_uuid)->first();
             if (is_null($this->server)) {
-                return redirect()->route('server.all');
+                return redirect()->route('server.index');
             }
         } catch (\Throwable $e) {
             return handleError($e, $this);
diff --git a/app/Livewire/Server/Show.php b/app/Livewire/Server/Show.php
index 065335835..13ebc97d4 100644
--- a/app/Livewire/Server/Show.php
+++ b/app/Livewire/Server/Show.php
@@ -17,7 +17,7 @@ class Show extends Component
         try {
             $this->server = Server::ownedByCurrentTeam()->whereUuid(request()->server_uuid)->first();
             if (is_null($this->server)) {
-                return redirect()->route('server.all');
+                return redirect()->route('server.index');
             }
 
         } catch (\Throwable $e) {
diff --git a/app/Livewire/Settings/Index.php b/app/Livewire/Settings/Index.php
new file mode 100644
index 000000000..0c1dd50e9
--- /dev/null
+++ b/app/Livewire/Settings/Index.php
@@ -0,0 +1,38 @@
+first();
+            $s3s = S3Storage::whereTeamId(0)->get() ?? [];
+            if ($database) {
+                if ($database->status !== 'running') {
+                    $database->status = 'running';
+                    $database->save();
+                }
+                $this->database = $database;
+            }
+            $this->settings = $settings;
+            $this->s3s = $s3s;
+        } else {
+            return redirect()->route('dashboard');
+        }
+    }
+    public function render()
+    {
+        return view('livewire.settings.index');
+    }
+}
diff --git a/app/Livewire/CheckLicense.php b/app/Livewire/Settings/License.php
similarity index 79%
rename from app/Livewire/CheckLicense.php
rename to app/Livewire/Settings/License.php
index 8d4351fce..64ad0a6f7 100644
--- a/app/Livewire/CheckLicense.php
+++ b/app/Livewire/Settings/License.php
@@ -1,15 +1,16 @@
  'nullable',
         'settings.is_resale_license_active' => 'nullable',
@@ -20,12 +21,17 @@ class CheckLicense extends Component
         'settings.is_resale_license_active' => 'Is License Active',
     ];
 
-    public function mount()
-    {
+    public function mount () {
+        if (!isCloud()) {
+            abort(404);
+        }
         $this->instance_id = config('app.id');
         $this->settings = InstanceSettings::get();
     }
-
+    public function render()
+    {
+        return view('livewire.settings.license')->layout('layouts.subscription');
+    }
     public function submit()
     {
         $this->validate();
diff --git a/app/Livewire/Subscription/Show.php b/app/Livewire/Subscription/Index.php
similarity index 86%
rename from app/Livewire/Subscription/Show.php
rename to app/Livewire/Subscription/Index.php
index 6c92f7555..afc3729c6 100644
--- a/app/Livewire/Subscription/Show.php
+++ b/app/Livewire/Subscription/Index.php
@@ -6,7 +6,7 @@ use App\Models\InstanceSettings;
 use App\Providers\RouteServiceProvider;
 use Livewire\Component;
 
-class Show extends Component
+class Index extends Component
 {
     public InstanceSettings $settings;
     public bool $alreadySubscribed = false;
@@ -26,6 +26,6 @@ class Show extends Component
     }
     public function render()
     {
-        return view('livewire.subscription.show')->layout('layouts.subscription');
+        return view('livewire.subscription.index')->layout('layouts.subscription');
     }
 }
diff --git a/app/Livewire/Team/Delete.php b/app/Livewire/Team/Delete.php
deleted file mode 100644
index 097419c4c..000000000
--- a/app/Livewire/Team/Delete.php
+++ /dev/null
@@ -1,29 +0,0 @@
-delete();
-
-        $currentTeam->members->each(function ($user) use ($currentTeam) {
-            if ($user->id === auth()->user()->id) {
-                return;
-            }
-            $user->teams()->detach($currentTeam);
-            $session = DB::table('sessions')->where('user_id', $user->id)->first();
-            if ($session) {
-                DB::table('sessions')->where('id', $session->id)->delete();
-            }
-        });
-
-        refreshSession();
-        return redirect()->route('team.index');
-    }
-}
diff --git a/app/Livewire/Team/Form.php b/app/Livewire/Team/Form.php
deleted file mode 100644
index 3deaf0b92..000000000
--- a/app/Livewire/Team/Form.php
+++ /dev/null
@@ -1,35 +0,0 @@
- 'required|min:3|max:255',
-        'team.description' => 'nullable|min:3|max:255',
-    ];
-    protected $validationAttributes = [
-        'team.name' => 'name',
-        'team.description' => 'description',
-    ];
-
-    public function mount()
-    {
-        $this->team = currentTeam();
-    }
-
-    public function submit()
-    {
-        $this->validate();
-        try {
-            $this->team->save();
-            refreshSession();
-        } catch (\Throwable $e) {
-            return handleError($e, $this);
-        }
-    }
-}
diff --git a/app/Livewire/Team/Index.php b/app/Livewire/Team/Index.php
new file mode 100644
index 000000000..b7482e671
--- /dev/null
+++ b/app/Livewire/Team/Index.php
@@ -0,0 +1,65 @@
+ 'required|min:3|max:255',
+        'team.description' => 'nullable|min:3|max:255',
+    ];
+    protected $validationAttributes = [
+        'team.name' => 'name',
+        'team.description' => 'description',
+    ];
+    public function mount() {
+        $this->team = currentTeam();
+
+        if (auth()->user()->isAdminFromSession()) {
+            $this->invitations = TeamInvitation::whereTeamId(currentTeam()->id)->get();
+        }
+    }
+    public function render()
+    {
+        return view('livewire.team.index');
+    }
+
+    public function submit()
+    {
+        $this->validate();
+        try {
+            $this->team->save();
+            refreshSession();
+            $this->dispatch('success', 'Team updated successfully.');
+        } catch (\Throwable $e) {
+            return handleError($e, $this);
+        }
+    }
+
+    public function delete()
+    {
+        $currentTeam = currentTeam();
+        $currentTeam->delete();
+
+        $currentTeam->members->each(function ($user) use ($currentTeam) {
+            if ($user->id === auth()->user()->id) {
+                return;
+            }
+            $user->teams()->detach($currentTeam);
+            $session = DB::table('sessions')->where('user_id', $user->id)->first();
+            if ($session) {
+                DB::table('sessions')->where('id', $session->id)->delete();
+            }
+        });
+
+        refreshSession();
+        return redirect()->route('team.index');
+    }
+}
diff --git a/app/Livewire/Team/Member/Index.php b/app/Livewire/Team/Member/Index.php
new file mode 100644
index 000000000..bca24c26c
--- /dev/null
+++ b/app/Livewire/Team/Member/Index.php
@@ -0,0 +1,20 @@
+user()->isAdminFromSession()) {
+            $this->invitations = TeamInvitation::whereTeamId(currentTeam()->id)->get();
+        }
+    }
+    public function render()
+    {
+        return view('livewire.team.member.index');
+    }
+}
diff --git a/app/Livewire/Team/Notification/Index.php b/app/Livewire/Team/Notification/Index.php
new file mode 100644
index 000000000..86754d619
--- /dev/null
+++ b/app/Livewire/Team/Notification/Index.php
@@ -0,0 +1,13 @@
+storage->team_id = currentTeam()->id;
             $this->storage->testConnection();
             $this->storage->save();
-            return redirect()->route('team.storages.show', $this->storage->uuid);
+            return redirect()->route('team.storage.show', $this->storage->uuid);
         } catch (\Throwable $e) {
             return handleError($e, $this);
         }
diff --git a/app/Livewire/Team/Storage/Form.php b/app/Livewire/Team/Storage/Form.php
index 23b0fe34c..8a26a3471 100644
--- a/app/Livewire/Team/Storage/Form.php
+++ b/app/Livewire/Team/Storage/Form.php
@@ -43,7 +43,7 @@ class Form extends Component
     {
         try {
             $this->storage->delete();
-            return redirect()->route('team.storages.all');
+            return redirect()->route('team.storage.index');
         } catch (\Throwable $e) {
             return handleError($e, $this);
         }
diff --git a/app/Livewire/Team/Storage/Index.php b/app/Livewire/Team/Storage/Index.php
new file mode 100644
index 000000000..c15834564
--- /dev/null
+++ b/app/Livewire/Team/Storage/Index.php
@@ -0,0 +1,18 @@
+s3 = S3Storage::ownedByCurrentTeam()->get();
+    }
+    public function render()
+    {
+        return view('livewire.team.storage.index');
+    }
+}
diff --git a/app/Livewire/Team/Storage/Show.php b/app/Livewire/Team/Storage/Show.php
new file mode 100644
index 000000000..6fbb6034f
--- /dev/null
+++ b/app/Livewire/Team/Storage/Show.php
@@ -0,0 +1,22 @@
+storage = S3Storage::ownedByCurrentTeam()->whereUuid(request()->storage_uuid)->first();
+        if (!$this->storage) {
+            abort(404);
+        }
+    }
+    public function render()
+    {
+        return view('livewire.team.storage.show');
+    }
+}
diff --git a/app/Models/Application.php b/app/Models/Application.php
index 995c28f7d..c16adc7e6 100644
--- a/app/Models/Application.php
+++ b/app/Models/Application.php
@@ -760,7 +760,6 @@ class Application extends BaseModel
         // if (count($this->ports_mappings_array) > 0) {
         // $deployment->addLogEntry('Application has ports mapped to the host system, rolling update is not supported.');
         $containers = getCurrentApplicationContainerStatus($server, $this->id, $pullRequestId);
-        ray($containers);
         // if ($pullRequestId === 0) {
         //     $containers = $containers->filter(function ($container) use ($containerName) {
         //         return data_get($container, 'Names') !== $containerName;
@@ -872,7 +871,6 @@ class Application extends BaseModel
             } else {
                 $git_clone_command = $this->setGitImportSettings($deployment_uuid, $git_clone_command_base);
             }
-            ray($git_clone_command);
             if ($exec_in_docker) {
                 $commands = collect([
                     executeInDocker($deployment_uuid, "mkdir -p /root/.ssh"),
diff --git a/app/Models/S3Storage.php b/app/Models/S3Storage.php
index ec18477eb..9d60ce491 100644
--- a/app/Models/S3Storage.php
+++ b/app/Models/S3Storage.php
@@ -48,7 +48,7 @@ class S3Storage extends BaseModel
             if ($this->unusable_email_sent === false && is_transactional_emails_active()) {
                 $mail = new MailMessage();
                 $mail->subject('Coolify: S3 Storage Connection Error');
-                $mail->view('emails.s3-connection-error', ['name' => $this->name, 'reason' => $e->getMessage(), 'url' => route('team.storages.show', ['storage_uuid' => $this->uuid])]);
+                $mail->view('emails.s3-connection-error', ['name' => $this->name, 'reason' => $e->getMessage(), 'url' => route('team.storage.show', ['storage_uuid' => $this->uuid])]);
                 $users = collect([]);
                 $members = $this->team->members()->get();
                 foreach ($members as $user) {
diff --git a/app/Models/Server.php b/app/Models/Server.php
index 291a9d479..65b992b5a 100644
--- a/app/Models/Server.php
+++ b/app/Models/Server.php
@@ -358,10 +358,10 @@ class Server extends BaseModel
     public function validateOS(): bool | Stringable
     {
         $os_release = instant_remote_process(['cat /etc/os-release'], $this);
-        $datas = collect(explode("\n", $os_release));
+        $releaseLines = collect(explode("\n", $os_release));
         $collectedData = collect([]);
-        foreach ($datas as $data) {
-            $item = Str::of($data)->trim();
+        foreach ($releaseLines as $line) {
+            $item = Str::of($line)->trim();
             $collectedData->put($item->before('=')->value(), $item->after('=')->lower()->replace('"', '')->value());
         }
         $ID = data_get($collectedData, 'ID');
diff --git a/app/Notifications/Channels/EmailChannel.php b/app/Notifications/Channels/EmailChannel.php
index 99afcf5a7..da8ef812e 100644
--- a/app/Notifications/Channels/EmailChannel.php
+++ b/app/Notifications/Channels/EmailChannel.php
@@ -14,8 +14,8 @@ class EmailChannel
     {
         try {
             $this->bootConfigs($notifiable);
-            $recepients = $notifiable->getRecepients($notification);
-            if (count($recepients) === 0) {
+            $recipients = $notifiable->getRecepients($notification);
+            if (count($recipients) === 0) {
                 throw new Exception('No email recipients found');
             }
 
@@ -24,7 +24,7 @@ class EmailChannel
                 [],
                 [],
                 fn (Message $message) => $message
-                    ->to($recepients)
+                    ->to($recipients)
                     ->subject($mailMessage->subject)
                     ->html((string)$mailMessage->render())
             );
@@ -35,8 +35,8 @@ class EmailChannel
             }
             ray($e->getMessage());
             $message = "EmailChannel error: {$e->getMessage()}. Failed to send email to:";
-            if (isset($recepients)) {
-                $message .= implode(', ', $recepients);
+            if (isset($recipients)) {
+                $message .= implode(', ', $recipients);
             }
             if (isset($mailMessage)) {
                 $message .= " with subject: {$mailMessage->subject}";
diff --git a/app/Notifications/Container/ContainerRestarted.php b/app/Notifications/Container/ContainerRestarted.php
index 723cad8f6..21dc799f8 100644
--- a/app/Notifications/Container/ContainerRestarted.php
+++ b/app/Notifications/Container/ContainerRestarted.php
@@ -27,7 +27,7 @@ class ContainerRestarted extends Notification implements ShouldQueue
     public function toMail(): MailMessage
     {
         $mail = new MailMessage();
-        $mail->subject("Coolify: A service ({$this->name}) has been restarted automatically on {$this->server->name}");
+        $mail->subject("Coolify: A resource ({$this->name}) has been restarted automatically on {$this->server->name}");
         $mail->view('emails.container-restarted', [
             'containerName' => $this->name,
             'serverName' => $this->server->name,
@@ -38,12 +38,12 @@ class ContainerRestarted extends Notification implements ShouldQueue
 
     public function toDiscord(): string
     {
-        $message = "Coolify: A service ({$this->name}) has been restarted automatically on {$this->server->name}";
+        $message = "Coolify: A resource ({$this->name}) has been restarted automatically on {$this->server->name}";
         return $message;
     }
     public function toTelegram(): array
     {
-        $message = "Coolify: A service ({$this->name}) has been restarted automatically on {$this->server->name}";
+        $message = "Coolify: A resource ({$this->name}) has been restarted automatically on {$this->server->name}";
         $payload = [
             "message" => $message,
         ];
diff --git a/app/Notifications/Container/ContainerStopped.php b/app/Notifications/Container/ContainerStopped.php
index ea474a3e9..ac218c5fe 100644
--- a/app/Notifications/Container/ContainerStopped.php
+++ b/app/Notifications/Container/ContainerStopped.php
@@ -26,7 +26,7 @@ class ContainerStopped extends Notification implements ShouldQueue
     public function toMail(): MailMessage
     {
         $mail = new MailMessage();
-        $mail->subject("Coolify: A service ({$this->name}) has been stopped on {$this->server->name}");
+        $mail->subject("Coolify: A resource  has been stopped unexpectedly on {$this->server->name}");
         $mail->view('emails.container-stopped', [
             'containerName' => $this->name,
             'serverName' => $this->server->name,
@@ -37,12 +37,12 @@ class ContainerStopped extends Notification implements ShouldQueue
 
     public function toDiscord(): string
     {
-        $message = "Coolify: A service ({$this->name}) has been stopped on {$this->server->name}";
+        $message = "Coolify: A resource has been stopped unexpectedly on {$this->server->name}";
         return $message;
     }
     public function toTelegram(): array
     {
-        $message = "Coolify: A service ($this->name} has been stopped on {$this->server->name}";
+        $message = "Coolify: A resource has been stopped unexpectedly on {$this->server->name}";
         $payload = [
             "message" => $message,
         ];
diff --git a/app/Providers/FortifyServiceProvider.php b/app/Providers/FortifyServiceProvider.php
index ccd90d14b..630da761d 100644
--- a/app/Providers/FortifyServiceProvider.php
+++ b/app/Providers/FortifyServiceProvider.php
@@ -31,7 +31,7 @@ class FortifyServiceProvider extends ServiceProvider
             {
                 // First user (root) will be redirected to /settings instead of / on registration.
                 if ($request->user()->currentTeam->id === 0) {
-                    return redirect()->route('settings.configuration');
+                    return redirect()->route('settings.index');
                 }
                 return redirect(RouteServiceProvider::HOME);
             }
diff --git a/bootstrap/helpers/docker.php b/bootstrap/helpers/docker.php
index 21dfe3e3c..781888595 100644
--- a/bootstrap/helpers/docker.php
+++ b/bootstrap/helpers/docker.php
@@ -226,8 +226,8 @@ function fqdnLabelsForTraefik(string $uuid, Collection $domains, bool $is_force_
             if (is_null($port) && !is_null($onlyPort)) {
                 $port = $onlyPort;
             }
-            $http_label = "{$uuid}-{$loop}-http";
-            $https_label = "{$uuid}-{$loop}-https";
+            $http_label = "http-{$loop}-{$uuid}";
+            $https_label = "https-{$loop}-{$uuid}";
 
             if ($schema === 'https') {
                 // Set labels for https
@@ -249,6 +249,10 @@ function fqdnLabelsForTraefik(string $uuid, Collection $domains, bool $is_force_
                 // Set labels for http (redirect to https)
                 $labels->push("traefik.http.routers.{$http_label}.rule=Host(`{$host}`) && PathPrefix(`{$path}`)");
                 $labels->push("traefik.http.routers.{$http_label}.entryPoints=http");
+                if ($port) {
+                    $labels->push("traefik.http.services.{$http_label}.loadbalancer.server.port=$port");
+                    $labels->push("traefik.http.routers.{$http_label}.service={$http_label}");
+                }
                 if ($is_force_https_enabled) {
                     $labels->push("traefik.http.routers.{$http_label}.middlewares=redirect-to-https");
                 }
@@ -258,27 +262,26 @@ function fqdnLabelsForTraefik(string $uuid, Collection $domains, bool $is_force_
                 $labels->push("traefik.http.routers.{$http_label}.entryPoints=http");
                 $labels->push("traefik.http.routers.{$http_label}.middlewares=gzip");
                 if ($port) {
-                    $labels->push("traefik.http.routers.{$http_label}.service={$http_label}");
                     $labels->push("traefik.http.services.{$http_label}.loadbalancer.server.port=$port");
+                    $labels->push("traefik.http.routers.{$http_label}.service={$http_label}");
                 }
                 if ($path !== '/') {
                     $labels->push("traefik.http.routers.{$http_label}.middlewares={$http_label}-stripprefix");
                     $labels->push("traefik.http.middlewares.{$http_label}-stripprefix.stripprefix.prefixes={$path}");
                 }
             }
-        } catch(\Throwable $e) {
+        } catch (\Throwable $e) {
             continue;
         }
-
     }
 
-    return $labels;
+    return $labels->sort();
 }
 function generateLabelsApplication(Application $application, ?ApplicationPreview $preview = null): array
 {
     $ports = $application->settings->is_static ? [80] : $application->ports_exposes_array;
     $onlyPort = null;
-    if (count($ports) === 1) {
+    if (count($ports) > 0) {
         $onlyPort = $ports[0];
     }
     $pull_request_id = data_get($preview, 'pull_request_id', 0);
diff --git a/bootstrap/helpers/proxy.php b/bootstrap/helpers/proxy.php
index 0ff3d1344..1c419afbf 100644
--- a/bootstrap/helpers/proxy.php
+++ b/bootstrap/helpers/proxy.php
@@ -101,7 +101,6 @@ function generate_default_proxy_configuration(Server $server)
     $labels = [
         "traefik.enable=true",
         "traefik.http.routers.traefik.entrypoints=http",
-        "traefik.http.routers.traefik.middlewares=traefik-basic-auth@file",
         "traefik.http.routers.traefik.service=api@internal",
         "traefik.http.services.traefik.loadbalancer.server.port=8080",
         // Global Middlewares
@@ -156,7 +155,7 @@ function generate_default_proxy_configuration(Server $server)
         ],
     ];
     if (isDev()) {
-        $config['services']['traefik']['command'][] = "--log.level=debug";
+        // $config['services']['traefik']['command'][] = "--log.level=debug";
         $config['services']['traefik']['command'][] = "--accesslog.filepath=/traefik/access.log";
         $config['services']['traefik']['command'][] = "--accesslog.bufferingsize=100";
     }
diff --git a/bootstrap/helpers/shared.php b/bootstrap/helpers/shared.php
index 08315b422..87a850fe4 100644
--- a/bootstrap/helpers/shared.php
+++ b/bootstrap/helpers/shared.php
@@ -408,7 +408,7 @@ function generateFqdn(Server $server, string $random)
 }
 function sslip(Server $server)
 {
-    if (isDev()) {
+    if (isDev() && $server->id === 0) {
         return "http://127.0.0.1.sslip.io";
     }
     if ($server->ip === 'host.docker.internal') {
diff --git a/config/queue.php b/config/queue.php
index 29b79353a..2ef618584 100644
--- a/config/queue.php
+++ b/config/queue.php
@@ -65,7 +65,7 @@ return [
             'driver' => 'redis',
             'connection' => 'default',
             'queue' => env('REDIS_QUEUE', 'default'),
-            'retry_after' => 300,
+            'retry_after' => 3600,
             'block_for' => null,
             'after_commit' => true,
         ],
diff --git a/config/sentry.php b/config/sentry.php
index e243eb466..4df15f841 100644
--- a/config/sentry.php
+++ b/config/sentry.php
@@ -7,7 +7,7 @@ return [
 
     // The release version of your application
     // Example with dynamic git hash: trim(exec('git --git-dir ' . base_path('.git') . ' log --pretty="%h" -n1 HEAD'))
-    'release' => '4.0.0-beta.182',
+    'release' => '4.0.0-beta.186',
     // When left empty or `null` the Laravel environment will be used
     'environment' => config('app.env'),
 
diff --git a/config/version.php b/config/version.php
index e853b7527..be52135e7 100644
--- a/config/version.php
+++ b/config/version.php
@@ -1,3 +1,3 @@
 
-