Files
vibn-frontend/env_data.json
mawkone 6b8862ef2b feat(api): comprehensive QA hardening — security gates, chat improvements, beta scaffolds
Closes checklist items F-01..F-06, D-01..D-28, S-01..S-10, C-01..C-07,
B-01..B-07, R-01..R-02, O-03.

Security (28 deletions + 10 auth gates):
- Delete 28 unauthenticated debug/cursor/firebase/test routes
- Gate ai/chat, ai/conversation, context/summarize, work-completed with withTenantProject/withAuth
- Add HMAC-SHA256 signature verification to webhooks/coolify
- Switch all admin secret comparisons to timingSafeStringEq

Foundations (lib/server/*):
- api-handler.ts: withAuth, withTenantProject, withWorkspace, withAdminSecret, withRateLimit
- logger.ts: structured request-scoped logging with turnId
- audit-log.ts: writeAuditLog helper + audit_log table
- rate-limit.ts: Postgres sliding window rate limiter
- coolify-webhook.ts: verifyCoolifySignature
- timing-safe.ts: timingSafeStringEq

Chat hardening (chat/route.ts):
- MAX_TOOL_ROUNDS 15 → 8 (C-01)
- Loop detection: hard-break at 3 identical fingerprints (was 5) (C-02)
- Add 6-consecutive-tool-call hard-break (C-02)
- Mode: respond first, act second prompt block (C-03)
- SSE heartbeat every 25s via setInterval (C-04)
- Per-tool 45s timeout via Promise.race (C-05)
- turnId per-turn UUID for log correlation (C-06)
- Recovery fires when roundsSinceText >= 4 (C-07)
- SSE plan event on plan_task_add/edit (B-05)

Beta features:
- invites table + GET/POST /api/invites (P4.8)
- invites/[token] validate + redeem (P4.8)
- fs_project_dev_servers table + lib/server/dev-server-state.ts (P6.B1)
- fs_project_secrets table + CRUD routes (P6.D2)
- lib/integrations/brief-extract.ts (P3.7)

Documentation:
- app/api/ROUTES.md: full route map with auth + tenant
2026-05-17 19:17:22 -07:00

1 line
36 KiB
JSON

{"id":1,"uuid":"foskksoccksk0kc4g8sk88ok","name":"production","applications":[{"id":7,"repository_project_id":null,"uuid":"m84cc4wsc0ckws8g8k44kkk8","name":"vibn-api","fqdn":"https:\/\/api.vibnai.com","config_hash":"8369c478f4c36fff33de214c7712568b","git_repository":"https:\/\/git.vibnai.com\/mark\/vibn-api.git","git_branch":"main","git_commit_sha":"HEAD","git_full_url":null,"docker_registry_image_name":null,"docker_registry_image_tag":null,"build_pack":"dockerfile","static_image":"nginx:alpine","install_command":null,"build_command":null,"start_command":null,"ports_exposes":"3001","ports_mappings":null,"base_directory":"\/","publish_directory":null,"health_check_path":"\/","health_check_port":null,"health_check_host":"localhost","health_check_method":"GET","health_check_return_code":200,"health_check_scheme":"http","health_check_response_text":null,"health_check_interval":30,"health_check_timeout":3,"health_check_retries":3,"health_check_start_period":5,"limits_memory":"0","limits_memory_swap":"0","limits_memory_swappiness":60,"limits_memory_reservation":"0","limits_cpus":"0","limits_cpuset":null,"limits_cpu_shares":1024,"status":"running:healthy","preview_url_template":"{{pr_id}}.{{domain}}","destination_type":"App\\Models\\StandaloneDocker","destination_id":0,"source_type":null,"source_id":null,"private_key_id":null,"environment_id":1,"created_at":"2026-02-16T03:46:33.000000Z","updated_at":"2026-05-15T20:42:32.000000Z","description":"VIBN API\/Proxy Server","dockerfile":null,"health_check_enabled":false,"dockerfile_location":"\/Dockerfile","custom_labels":"dHJhZWZpay5lbmFibGU9dHJ1ZQp0cmFlZmlrLmh0dHAubWlkZGxld2FyZXMuZ3ppcC5jb21wcmVzcz10cnVlCnRyYWVmaWsuaHR0cC5taWRkbGV3YXJlcy5yZWRpcmVjdC10by1odHRwcy5yZWRpcmVjdHNjaGVtZS5zY2hlbWU9aHR0cHMKdHJhZWZpay5odHRwLnJvdXRlcnMuaHR0cC0wLW04NGNjNHdzYzBja3dzOGc4azQ0a2trOC5lbnRyeVBvaW50cz1odHRwCnRyYWVmaWsuaHR0cC5yb3V0ZXJzLmh0dHAtMC1tODRjYzR3c2MwY2t3czhnOGs0NGtrazgubWlkZGxld2FyZXM9cmVkaXJlY3QtdG8taHR0cHMKdHJhZWZpay5odHRwLnJvdXRlcnMuaHR0cC0wLW04NGNjNHdzYzBja3dzOGc4azQ0a2trOC5ydWxlPUhvc3QoYGFwaS52aWJuYWkuY29tYCkgJiYgUGF0aFByZWZpeChgL2ApCnRyYWVmaWsuaHR0cC5yb3V0ZXJzLmh0dHAtMC1tODRjYzR3c2MwY2t3czhnOGs0NGtrazguc2VydmljZT1odHRwLTAtbTg0Y2M0d3NjMGNrd3M4ZzhrNDRra2s4CnRyYWVmaWsuaHR0cC5yb3V0ZXJzLmh0dHBzLTAtbTg0Y2M0d3NjMGNrd3M4ZzhrNDRra2s4LmVudHJ5UG9pbnRzPWh0dHBzCnRyYWVmaWsuaHR0cC5yb3V0ZXJzLmh0dHBzLTAtbTg0Y2M0d3NjMGNrd3M4ZzhrNDRra2s4Lm1pZGRsZXdhcmVzPWd6aXAKdHJhZWZpay5odHRwLnJvdXRlcnMuaHR0cHMtMC1tODRjYzR3c2MwY2t3czhnOGs0NGtrazgucnVsZT1Ib3N0KGBhcGkudmlibmFpLmNvbWApICYmIFBhdGhQcmVmaXgoYC9gKQp0cmFlZmlrLmh0dHAucm91dGVycy5odHRwcy0wLW04NGNjNHdzYzBja3dzOGc4azQ0a2trOC5zZXJ2aWNlPWh0dHBzLTAtbTg0Y2M0d3NjMGNrd3M4ZzhrNDRra2s4CnRyYWVmaWsuaHR0cC5yb3V0ZXJzLmh0dHBzLTAtbTg0Y2M0d3NjMGNrd3M4ZzhrNDRra2s4LnRscy5jZXJ0cmVzb2x2ZXI9bGV0c2VuY3J5cHQKdHJhZWZpay5odHRwLnJvdXRlcnMuaHR0cHMtMC1tODRjYzR3c2MwY2t3czhnOGs0NGtrazgudGxzPXRydWUKdHJhZWZpay5odHRwLnNlcnZpY2VzLmh0dHAtMC1tODRjYzR3c2MwY2t3czhnOGs0NGtrazgubG9hZGJhbGFuY2VyLnNlcnZlci5wb3J0PTMwMDEKdHJhZWZpay5odHRwLnNlcnZpY2VzLmh0dHBzLTAtbTg0Y2M0d3NjMGNrd3M4ZzhrNDRra2s4LmxvYWRiYWxhbmNlci5zZXJ2ZXIucG9ydD0zMDAxCmNhZGR5XzAuZW5jb2RlPXpzdGQgZ3ppcApjYWRkeV8wLmhhbmRsZV9wYXRoLjBfcmV2ZXJzZV9wcm94eT17e3Vwc3RyZWFtcyAzMDAxfX0KY2FkZHlfMC5oYW5kbGVfcGF0aD0vKgpjYWRkeV8wLmhlYWRlcj0tU2VydmVyCmNhZGR5XzAudHJ5X2ZpbGVzPXtwYXRofSAvaW5kZXguaHRtbCAvaW5kZXgucGhwCmNhZGR5XzA9aHR0cHM6Ly9hcGkudmlibmFpLmNvbQpjYWRkeV9pbmdyZXNzX25ldHdvcms9Y29vbGlmeQ==","dockerfile_target_build":null,"manual_webhook_secret_github":null,"manual_webhook_secret_gitlab":null,"docker_compose_location":"\/docker-compose.yaml","docker_compose":null,"docker_compose_raw":null,"docker_compose_domains":null,"deleted_at":null,"docker_compose_custom_start_command":null,"docker_compose_custom_build_command":null,"swarm_replicas":1,"swarm_placement_constraints":null,"manual_webhook_secret_bitbucket":null,"custom_docker_run_options":null,"post_deployment_command":null,"post_deployment_command_container":null,"pre_deployment_command":null,"pre_deployment_command_container":null,"watch_paths":null,"custom_healthcheck_found":true,"manual_webhook_secret_gitea":null,"redirect":"both","compose_parsing_version":"5","last_online_at":"2026-05-15 20:42:32","custom_nginx_configuration":"","custom_network_aliases":null,"is_http_basic_auth_enabled":false,"http_basic_auth_username":null,"http_basic_auth_password":null,"restart_count":0,"last_restart_at":null,"last_restart_type":null,"health_check_type":"http","health_check_command":null,"additional_servers_count":0,"additional_networks_count":0,"server_status":true,"additional_servers":[],"destination":{"id":0,"name":"coolify","uuid":"zkogkggkw0wg40gccks80oo0","network":"coolify","server_id":0,"created_at":"2026-02-14T21:41:51.000000Z","updated_at":"2026-02-14T21:41:51.000000Z","server":{"id":0,"uuid":"jws4g4cgssss4cw48s488woc","name":"localhost","description":"This is the server where Coolify is running on. Don't delete this!","ip":"host.docker.internal","port":22,"user":"root","team_id":0,"private_key_id":0,"proxy":{"type":"TRAEFIK","status":"running","last_saved_settings":null,"last_applied_settings":null,"redirect_enabled":true,"force_stop":false},"created_at":"2026-02-14T21:41:51.000000Z","updated_at":"2026-05-15T20:42:32.000000Z","unreachable_notification_sent":false,"unreachable_count":0,"high_disk_usage_notification_sent":false,"log_drain_notification_sent":false,"swarm_cluster":null,"validation_logs":null,"sentinel_updated_at":"2026-05-15 20:42:32","deleted_at":null,"ip_previous":null,"hetzner_server_id":null,"cloud_provider_token_id":null,"hetzner_server_status":null,"is_validating":false,"detected_traefik_version":"3.6.8","traefik_outdated_info":{"current":"3.6.8","latest":"3.6.11","type":"patch_update","checked_at":"2026-05-10T00:00:42+00:00"},"server_metadata":null,"is_coolify_host":true,"settings":{"id":1,"is_swarm_manager":false,"is_jump_server":false,"is_build_server":false,"is_reachable":true,"is_usable":true,"server_id":0,"created_at":"2026-02-14T21:41:51.000000Z","updated_at":"2026-02-14T21:49:13.000000Z","wildcard_domain":null,"is_cloudflare_tunnel":false,"is_logdrain_newrelic_enabled":false,"logdrain_newrelic_license_key":null,"logdrain_newrelic_base_uri":null,"is_logdrain_highlight_enabled":false,"logdrain_highlight_project_id":null,"is_logdrain_axiom_enabled":false,"logdrain_axiom_dataset_name":null,"logdrain_axiom_api_key":null,"is_swarm_worker":false,"is_logdrain_custom_enabled":false,"logdrain_custom_config":null,"logdrain_custom_config_parser":null,"concurrent_builds":2,"dynamic_timeout":3600,"force_disabled":false,"is_metrics_enabled":false,"generate_exact_labels":false,"force_docker_cleanup":true,"docker_cleanup_frequency":"0 *\/6 * * *","docker_cleanup_threshold":75,"server_timezone":"UTC","delete_unused_volumes":false,"delete_unused_networks":false,"is_sentinel_enabled":true,"sentinel_token":"eyJpdiI6Ii9MSGRUb1JDWDZUSGE2b2dPVU5ka2c9PSIsInZhbHVlIjoiRVVkYXBZYmtIenRtTVBqK01GRnhJNERrT3RwLzhYK3EwT2hIM2JtOS9TeGdZNEl2VWRHczBHYXgzQTJ4UnpJTkluVU1RRXF1SVVXREZBZVpyaU1TZEE9PSIsIm1hYyI6IjdjZjYxNmEzZTM2OThjYjA4MGVlYzBkOGZlOGNmOTU1ZTA5MjJmZTY5ZGQ5OTczZWRkYTRkZDQ0ZDMzY2VjNzciLCJ0YWciOiIifQ==","sentinel_metrics_refresh_rate_seconds":10,"sentinel_metrics_history_days":7,"sentinel_push_interval_seconds":60,"sentinel_custom_url":"http:\/\/host.docker.internal:8000","server_disk_usage_notification_threshold":80,"is_sentinel_debug_enabled":false,"server_disk_usage_check_frequency":"0 23 * * *","is_terminal_enabled":true,"deployment_queue_limit":25,"disable_application_image_retention":false}}}},{"id":11,"repository_project_id":null,"uuid":"jss08wssogw4kw8gok0sk0w0","name":"vibn-agent-runner","fqdn":"https:\/\/agents.vibnai.com","config_hash":"8728b5bd004205482b619c498254bb8d","git_repository":"https:\/\/git.vibnai.com\/mark\/vibn-agent-runner.git","git_branch":"main","git_commit_sha":"HEAD","git_full_url":null,"docker_registry_image_name":null,"docker_registry_image_tag":null,"build_pack":"dockerfile","static_image":"nginx:alpine","install_command":null,"build_command":null,"start_command":null,"ports_exposes":"3333","ports_mappings":null,"base_directory":"\/","publish_directory":null,"health_check_path":"\/","health_check_port":null,"health_check_host":"localhost","health_check_method":"GET","health_check_return_code":200,"health_check_scheme":"http","health_check_response_text":null,"health_check_interval":5,"health_check_timeout":5,"health_check_retries":10,"health_check_start_period":5,"limits_memory":"0","limits_memory_swap":"0","limits_memory_swappiness":60,"limits_memory_reservation":"0","limits_cpus":"0","limits_cpuset":null,"limits_cpu_shares":1024,"status":"running:unknown","preview_url_template":"{{pr_id}}.{{domain}}","destination_type":"App\\Models\\StandaloneDocker","destination_id":0,"source_type":null,"source_id":null,"private_key_id":null,"environment_id":1,"created_at":"2026-02-26T22:52:01.000000Z","updated_at":"2026-05-15T20:42:32.000000Z","description":"","dockerfile":null,"health_check_enabled":false,"dockerfile_location":"\/.\/Dockerfile","custom_labels":"dHJhZWZpay5lbmFibGU9dHJ1ZQp0cmFlZmlrLmh0dHAubWlkZGxld2FyZXMuZ3ppcC5jb21wcmVzcz10cnVlCnRyYWVmaWsuaHR0cC5taWRkbGV3YXJlcy5yZWRpcmVjdC10by1odHRwcy5yZWRpcmVjdHNjaGVtZS5zY2hlbWU9aHR0cHMKdHJhZWZpay5odHRwLnJvdXRlcnMuaHR0cC0wLWpzczA4d3Nzb2d3NGt3OGdvazBzazB3MC5lbnRyeVBvaW50cz1odHRwCnRyYWVmaWsuaHR0cC5yb3V0ZXJzLmh0dHAtMC1qc3MwOHdzc29ndzRrdzhnb2swc2swdzAubWlkZGxld2FyZXM9cmVkaXJlY3QtdG8taHR0cHMKdHJhZWZpay5odHRwLnJvdXRlcnMuaHR0cC0wLWpzczA4d3Nzb2d3NGt3OGdvazBzazB3MC5ydWxlPUhvc3QoYGFnZW50cy52aWJuYWkuY29tYCkgJiYgUGF0aFByZWZpeChgL2ApCnRyYWVmaWsuaHR0cC5yb3V0ZXJzLmh0dHAtMC1qc3MwOHdzc29ndzRrdzhnb2swc2swdzAuc2VydmljZT1odHRwLTAtanNzMDh3c3NvZ3c0a3c4Z29rMHNrMHcwCnRyYWVmaWsuaHR0cC5yb3V0ZXJzLmh0dHBzLTAtanNzMDh3c3NvZ3c0a3c4Z29rMHNrMHcwLmVudHJ5UG9pbnRzPWh0dHBzCnRyYWVmaWsuaHR0cC5yb3V0ZXJzLmh0dHBzLTAtanNzMDh3c3NvZ3c0a3c4Z29rMHNrMHcwLm1pZGRsZXdhcmVzPWd6aXAKdHJhZWZpay5odHRwLnJvdXRlcnMuaHR0cHMtMC1qc3MwOHdzc29ndzRrdzhnb2swc2swdzAucnVsZT1Ib3N0KGBhZ2VudHMudmlibmFpLmNvbWApICYmIFBhdGhQcmVmaXgoYC9gKQp0cmFlZmlrLmh0dHAucm91dGVycy5odHRwcy0wLWpzczA4d3Nzb2d3NGt3OGdvazBzazB3MC5zZXJ2aWNlPWh0dHBzLTAtanNzMDh3c3NvZ3c0a3c4Z29rMHNrMHcwCnRyYWVmaWsuaHR0cC5yb3V0ZXJzLmh0dHBzLTAtanNzMDh3c3NvZ3c0a3c4Z29rMHNrMHcwLnRscy5jZXJ0cmVzb2x2ZXI9bGV0c2VuY3J5cHQKdHJhZWZpay5odHRwLnJvdXRlcnMuaHR0cHMtMC1qc3MwOHdzc29ndzRrdzhnb2swc2swdzAudGxzPXRydWUKdHJhZWZpay5odHRwLnNlcnZpY2VzLmh0dHAtMC1qc3MwOHdzc29ndzRrdzhnb2swc2swdzAubG9hZGJhbGFuY2VyLnNlcnZlci5wb3J0PTMzMzMKdHJhZWZpay5odHRwLnNlcnZpY2VzLmh0dHBzLTAtanNzMDh3c3NvZ3c0a3c4Z29rMHNrMHcwLmxvYWRiYWxhbmNlci5zZXJ2ZXIucG9ydD0zMzMzCmNhZGR5XzAuZW5jb2RlPXpzdGQgZ3ppcApjYWRkeV8wLmhhbmRsZV9wYXRoLjBfcmV2ZXJzZV9wcm94eT17e3Vwc3RyZWFtcyAzMzMzfX0KY2FkZHlfMC5oYW5kbGVfcGF0aD0vKgpjYWRkeV8wLmhlYWRlcj0tU2VydmVyCmNhZGR5XzAudHJ5X2ZpbGVzPXtwYXRofSAvaW5kZXguaHRtbCAvaW5kZXgucGhwCmNhZGR5XzA9aHR0cHM6Ly9hZ2VudHMudmlibmFpLmNvbQpjYWRkeV9pbmdyZXNzX25ldHdvcms9Y29vbGlmeQ==","dockerfile_target_build":null,"manual_webhook_secret_github":null,"manual_webhook_secret_gitlab":null,"docker_compose_location":"\/docker-compose.yaml","docker_compose":null,"docker_compose_raw":null,"docker_compose_domains":null,"deleted_at":null,"docker_compose_custom_start_command":null,"docker_compose_custom_build_command":null,"swarm_replicas":1,"swarm_placement_constraints":null,"manual_webhook_secret_bitbucket":null,"custom_docker_run_options":"--volume \/var\/run\/docker.sock:\/var\/run\/docker.sock","post_deployment_command":null,"post_deployment_command_container":null,"pre_deployment_command":null,"pre_deployment_command_container":null,"watch_paths":null,"custom_healthcheck_found":false,"manual_webhook_secret_gitea":null,"redirect":"both","compose_parsing_version":"5","last_online_at":"2026-05-15 20:42:32","custom_nginx_configuration":"","custom_network_aliases":null,"is_http_basic_auth_enabled":false,"http_basic_auth_username":null,"http_basic_auth_password":null,"restart_count":0,"last_restart_at":null,"last_restart_type":null,"health_check_type":"http","health_check_command":null,"additional_servers_count":0,"additional_networks_count":0,"server_status":true,"additional_servers":[],"destination":{"id":0,"name":"coolify","uuid":"zkogkggkw0wg40gccks80oo0","network":"coolify","server_id":0,"created_at":"2026-02-14T21:41:51.000000Z","updated_at":"2026-02-14T21:41:51.000000Z","server":{"id":0,"uuid":"jws4g4cgssss4cw48s488woc","name":"localhost","description":"This is the server where Coolify is running on. Don't delete this!","ip":"host.docker.internal","port":22,"user":"root","team_id":0,"private_key_id":0,"proxy":{"type":"TRAEFIK","status":"running","last_saved_settings":null,"last_applied_settings":null,"redirect_enabled":true,"force_stop":false},"created_at":"2026-02-14T21:41:51.000000Z","updated_at":"2026-05-15T20:42:32.000000Z","unreachable_notification_sent":false,"unreachable_count":0,"high_disk_usage_notification_sent":false,"log_drain_notification_sent":false,"swarm_cluster":null,"validation_logs":null,"sentinel_updated_at":"2026-05-15 20:42:32","deleted_at":null,"ip_previous":null,"hetzner_server_id":null,"cloud_provider_token_id":null,"hetzner_server_status":null,"is_validating":false,"detected_traefik_version":"3.6.8","traefik_outdated_info":{"current":"3.6.8","latest":"3.6.11","type":"patch_update","checked_at":"2026-05-10T00:00:42+00:00"},"server_metadata":null,"is_coolify_host":true,"settings":{"id":1,"is_swarm_manager":false,"is_jump_server":false,"is_build_server":false,"is_reachable":true,"is_usable":true,"server_id":0,"created_at":"2026-02-14T21:41:51.000000Z","updated_at":"2026-02-14T21:49:13.000000Z","wildcard_domain":null,"is_cloudflare_tunnel":false,"is_logdrain_newrelic_enabled":false,"logdrain_newrelic_license_key":null,"logdrain_newrelic_base_uri":null,"is_logdrain_highlight_enabled":false,"logdrain_highlight_project_id":null,"is_logdrain_axiom_enabled":false,"logdrain_axiom_dataset_name":null,"logdrain_axiom_api_key":null,"is_swarm_worker":false,"is_logdrain_custom_enabled":false,"logdrain_custom_config":null,"logdrain_custom_config_parser":null,"concurrent_builds":2,"dynamic_timeout":3600,"force_disabled":false,"is_metrics_enabled":false,"generate_exact_labels":false,"force_docker_cleanup":true,"docker_cleanup_frequency":"0 *\/6 * * *","docker_cleanup_threshold":75,"server_timezone":"UTC","delete_unused_volumes":false,"delete_unused_networks":false,"is_sentinel_enabled":true,"sentinel_token":"eyJpdiI6Ii9MSGRUb1JDWDZUSGE2b2dPVU5ka2c9PSIsInZhbHVlIjoiRVVkYXBZYmtIenRtTVBqK01GRnhJNERrT3RwLzhYK3EwT2hIM2JtOS9TeGdZNEl2VWRHczBHYXgzQTJ4UnpJTkluVU1RRXF1SVVXREZBZVpyaU1TZEE9PSIsIm1hYyI6IjdjZjYxNmEzZTM2OThjYjA4MGVlYzBkOGZlOGNmOTU1ZTA5MjJmZTY5ZGQ5OTczZWRkYTRkZDQ0ZDMzY2VjNzciLCJ0YWciOiIifQ==","sentinel_metrics_refresh_rate_seconds":10,"sentinel_metrics_history_days":7,"sentinel_push_interval_seconds":60,"sentinel_custom_url":"http:\/\/host.docker.internal:8000","server_disk_usage_notification_threshold":80,"is_sentinel_debug_enabled":false,"server_disk_usage_check_frequency":"0 23 * * *","is_terminal_enabled":true,"deployment_queue_limit":25,"disable_application_image_retention":false}}}},{"id":8,"repository_project_id":null,"uuid":"y4cscsc8s08c8808go0448s0","name":"vibn-frontend","fqdn":"https:\/\/vibnai.com,https:\/\/www.vibnai.com","config_hash":"6ed60185dad03810d4b9db6ce4fa76a2","git_repository":"https:\/\/git.vibnai.com\/mark\/vibn-frontend.git","git_branch":"main","git_commit_sha":"HEAD","git_full_url":null,"docker_registry_image_name":null,"docker_registry_image_tag":null,"build_pack":"dockerfile","static_image":"nginx:alpine","install_command":null,"build_command":null,"start_command":null,"ports_exposes":"3000","ports_mappings":null,"base_directory":"\/","publish_directory":null,"health_check_path":"\/","health_check_port":"3000","health_check_host":"127.0.0.1","health_check_method":"GET","health_check_return_code":200,"health_check_scheme":"http","health_check_response_text":null,"health_check_interval":5,"health_check_timeout":5,"health_check_retries":15,"health_check_start_period":90,"limits_memory":"0","limits_memory_swap":"0","limits_memory_swappiness":60,"limits_memory_reservation":"0","limits_cpus":"0","limits_cpuset":null,"limits_cpu_shares":1024,"status":"running:healthy","preview_url_template":"{{pr_id}}.{{domain}}","destination_type":"App\\Models\\StandaloneDocker","destination_id":0,"source_type":null,"source_id":null,"private_key_id":null,"environment_id":1,"created_at":"2026-02-16T22:29:56.000000Z","updated_at":"2026-05-15T20:42:32.000000Z","description":"VIBN Frontend - Next.js Application","dockerfile":null,"health_check_enabled":true,"dockerfile_location":"\/Dockerfile","custom_labels":"dHJhZWZpay5lbmFibGU9dHJ1ZQp0cmFlZmlrLmh0dHAubWlkZGxld2FyZXMuZ3ppcC5jb21wcmVzcz10cnVlCnRyYWVmaWsuaHR0cC5taWRkbGV3YXJlcy5yZWRpcmVjdC10by1odHRwcy5yZWRpcmVjdHNjaGVtZS5zY2hlbWU9aHR0cHMKdHJhZWZpay5odHRwLnJvdXRlcnMuaHR0cC0wLXk0Y3Njc2M4czA4Yzg4MDhnbzA0NDhzMC5lbnRyeVBvaW50cz1odHRwCnRyYWVmaWsuaHR0cC5yb3V0ZXJzLmh0dHAtMC15NGNzY3NjOHMwOGM4ODA4Z28wNDQ4czAubWlkZGxld2FyZXM9cmVkaXJlY3QtdG8taHR0cHMKdHJhZWZpay5odHRwLnJvdXRlcnMuaHR0cC0wLXk0Y3Njc2M4czA4Yzg4MDhnbzA0NDhzMC5ydWxlPUhvc3QoYHZpYm5haS5jb21gKSAmJiBQYXRoUHJlZml4KGAvYCkKdHJhZWZpay5odHRwLnJvdXRlcnMuaHR0cC0wLXk0Y3Njc2M4czA4Yzg4MDhnbzA0NDhzMC5zZXJ2aWNlPWh0dHAtMC15NGNzY3NjOHMwOGM4ODA4Z28wNDQ4czAKdHJhZWZpay5odHRwLnJvdXRlcnMuaHR0cC0xLXk0Y3Njc2M4czA4Yzg4MDhnbzA0NDhzMC5lbnRyeVBvaW50cz1odHRwCnRyYWVmaWsuaHR0cC5yb3V0ZXJzLmh0dHAtMS15NGNzY3NjOHMwOGM4ODA4Z28wNDQ4czAubWlkZGxld2FyZXM9cmVkaXJlY3QtdG8taHR0cHMKdHJhZWZpay5odHRwLnJvdXRlcnMuaHR0cC0xLXk0Y3Njc2M4czA4Yzg4MDhnbzA0NDhzMC5ydWxlPUhvc3QoYHd3dy52aWJuYWkuY29tYCkgJiYgUGF0aFByZWZpeChgL2ApCnRyYWVmaWsuaHR0cC5yb3V0ZXJzLmh0dHAtMS15NGNzY3NjOHMwOGM4ODA4Z28wNDQ4czAuc2VydmljZT1odHRwLTEteTRjc2NzYzhzMDhjODgwOGdvMDQ0OHMwCnRyYWVmaWsuaHR0cC5yb3V0ZXJzLmh0dHBzLTAteTRjc2NzYzhzMDhjODgwOGdvMDQ0OHMwLmVudHJ5UG9pbnRzPWh0dHBzCnRyYWVmaWsuaHR0cC5yb3V0ZXJzLmh0dHBzLTAteTRjc2NzYzhzMDhjODgwOGdvMDQ0OHMwLm1pZGRsZXdhcmVzPWd6aXAKdHJhZWZpay5odHRwLnJvdXRlcnMuaHR0cHMtMC15NGNzY3NjOHMwOGM4ODA4Z28wNDQ4czAucnVsZT1Ib3N0KGB2aWJuYWkuY29tYCkgJiYgUGF0aFByZWZpeChgL2ApCnRyYWVmaWsuaHR0cC5yb3V0ZXJzLmh0dHBzLTAteTRjc2NzYzhzMDhjODgwOGdvMDQ0OHMwLnNlcnZpY2U9aHR0cHMtMC15NGNzY3NjOHMwOGM4ODA4Z28wNDQ4czAKdHJhZWZpay5odHRwLnJvdXRlcnMuaHR0cHMtMC15NGNzY3NjOHMwOGM4ODA4Z28wNDQ4czAudGxzLmNlcnRyZXNvbHZlcj1sZXRzZW5jcnlwdAp0cmFlZmlrLmh0dHAucm91dGVycy5odHRwcy0wLXk0Y3Njc2M4czA4Yzg4MDhnbzA0NDhzMC50bHM9dHJ1ZQp0cmFlZmlrLmh0dHAucm91dGVycy5odHRwcy0xLXk0Y3Njc2M4czA4Yzg4MDhnbzA0NDhzMC5lbnRyeVBvaW50cz1odHRwcwp0cmFlZmlrLmh0dHAucm91dGVycy5odHRwcy0xLXk0Y3Njc2M4czA4Yzg4MDhnbzA0NDhzMC5taWRkbGV3YXJlcz1nemlwCnRyYWVmaWsuaHR0cC5yb3V0ZXJzLmh0dHBzLTEteTRjc2NzYzhzMDhjODgwOGdvMDQ0OHMwLnJ1bGU9SG9zdChgd3d3LnZpYm5haS5jb21gKSAmJiBQYXRoUHJlZml4KGAvYCkKdHJhZWZpay5odHRwLnJvdXRlcnMuaHR0cHMtMS15NGNzY3NjOHMwOGM4ODA4Z28wNDQ4czAuc2VydmljZT1odHRwcy0xLXk0Y3Njc2M4czA4Yzg4MDhnbzA0NDhzMAp0cmFlZmlrLmh0dHAucm91dGVycy5odHRwcy0xLXk0Y3Njc2M4czA4Yzg4MDhnbzA0NDhzMC50bHMuY2VydHJlc29sdmVyPWxldHNlbmNyeXB0CnRyYWVmaWsuaHR0cC5yb3V0ZXJzLmh0dHBzLTEteTRjc2NzYzhzMDhjODgwOGdvMDQ0OHMwLnRscz10cnVlCnRyYWVmaWsuaHR0cC5zZXJ2aWNlcy5odHRwLTAteTRjc2NzYzhzMDhjODgwOGdvMDQ0OHMwLmxvYWRiYWxhbmNlci5zZXJ2ZXIucG9ydD0zMDAwCnRyYWVmaWsuaHR0cC5zZXJ2aWNlcy5odHRwLTEteTRjc2NzYzhzMDhjODgwOGdvMDQ0OHMwLmxvYWRiYWxhbmNlci5zZXJ2ZXIucG9ydD0zMDAwCnRyYWVmaWsuaHR0cC5zZXJ2aWNlcy5odHRwcy0wLXk0Y3Njc2M4czA4Yzg4MDhnbzA0NDhzMC5sb2FkYmFsYW5jZXIuc2VydmVyLnBvcnQ9MzAwMAp0cmFlZmlrLmh0dHAuc2VydmljZXMuaHR0cHMtMS15NGNzY3NjOHMwOGM4ODA4Z28wNDQ4czAubG9hZGJhbGFuY2VyLnNlcnZlci5wb3J0PTMwMDAKY2FkZHlfMC5lbmNvZGU9enN0ZCBnemlwCmNhZGR5XzAuaGFuZGxlX3BhdGguMF9yZXZlcnNlX3Byb3h5PXt7dXBzdHJlYW1zIDMwMDB9fQpjYWRkeV8wLmhhbmRsZV9wYXRoPS8qCmNhZGR5XzAuaGVhZGVyPS1TZXJ2ZXIKY2FkZHlfMC50cnlfZmlsZXM9e3BhdGh9IC9pbmRleC5odG1sIC9pbmRleC5waHAKY2FkZHlfMD1odHRwczovL3ZpYm5haS5jb20KY2FkZHlfMS5lbmNvZGU9enN0ZCBnemlwCmNhZGR5XzEuaGFuZGxlX3BhdGguMV9yZXZlcnNlX3Byb3h5PXt7dXBzdHJlYW1zIDMwMDB9fQpjYWRkeV8xLmhhbmRsZV9wYXRoPS8qCmNhZGR5XzEuaGVhZGVyPS1TZXJ2ZXIKY2FkZHlfMS50cnlfZmlsZXM9e3BhdGh9IC9pbmRleC5odG1sIC9pbmRleC5waHAKY2FkZHlfMT1odHRwczovL3d3dy52aWJuYWkuY29tCmNhZGR5X2luZ3Jlc3NfbmV0d29yaz1jb29saWZ5","dockerfile_target_build":null,"manual_webhook_secret_github":null,"manual_webhook_secret_gitlab":null,"docker_compose_location":"\/docker-compose.yaml","docker_compose":null,"docker_compose_raw":null,"docker_compose_domains":null,"deleted_at":null,"docker_compose_custom_start_command":null,"docker_compose_custom_build_command":null,"swarm_replicas":1,"swarm_placement_constraints":null,"manual_webhook_secret_bitbucket":null,"custom_docker_run_options":null,"post_deployment_command":null,"post_deployment_command_container":null,"pre_deployment_command":null,"pre_deployment_command_container":null,"watch_paths":null,"custom_healthcheck_found":false,"manual_webhook_secret_gitea":"c23f93114f0378ff15cbd863e3fbd23bb5c127ceace1756b","redirect":"both","compose_parsing_version":"5","last_online_at":"2026-05-15 20:42:32","custom_nginx_configuration":"","custom_network_aliases":null,"is_http_basic_auth_enabled":false,"http_basic_auth_username":null,"http_basic_auth_password":null,"restart_count":0,"last_restart_at":null,"last_restart_type":null,"health_check_type":"http","health_check_command":null,"additional_servers_count":0,"additional_networks_count":0,"server_status":true,"additional_servers":[],"destination":{"id":0,"name":"coolify","uuid":"zkogkggkw0wg40gccks80oo0","network":"coolify","server_id":0,"created_at":"2026-02-14T21:41:51.000000Z","updated_at":"2026-02-14T21:41:51.000000Z","server":{"id":0,"uuid":"jws4g4cgssss4cw48s488woc","name":"localhost","description":"This is the server where Coolify is running on. Don't delete this!","ip":"host.docker.internal","port":22,"user":"root","team_id":0,"private_key_id":0,"proxy":{"type":"TRAEFIK","status":"running","last_saved_settings":null,"last_applied_settings":null,"redirect_enabled":true,"force_stop":false},"created_at":"2026-02-14T21:41:51.000000Z","updated_at":"2026-05-15T20:42:32.000000Z","unreachable_notification_sent":false,"unreachable_count":0,"high_disk_usage_notification_sent":false,"log_drain_notification_sent":false,"swarm_cluster":null,"validation_logs":null,"sentinel_updated_at":"2026-05-15 20:42:32","deleted_at":null,"ip_previous":null,"hetzner_server_id":null,"cloud_provider_token_id":null,"hetzner_server_status":null,"is_validating":false,"detected_traefik_version":"3.6.8","traefik_outdated_info":{"current":"3.6.8","latest":"3.6.11","type":"patch_update","checked_at":"2026-05-10T00:00:42+00:00"},"server_metadata":null,"is_coolify_host":true,"settings":{"id":1,"is_swarm_manager":false,"is_jump_server":false,"is_build_server":false,"is_reachable":true,"is_usable":true,"server_id":0,"created_at":"2026-02-14T21:41:51.000000Z","updated_at":"2026-02-14T21:49:13.000000Z","wildcard_domain":null,"is_cloudflare_tunnel":false,"is_logdrain_newrelic_enabled":false,"logdrain_newrelic_license_key":null,"logdrain_newrelic_base_uri":null,"is_logdrain_highlight_enabled":false,"logdrain_highlight_project_id":null,"is_logdrain_axiom_enabled":false,"logdrain_axiom_dataset_name":null,"logdrain_axiom_api_key":null,"is_swarm_worker":false,"is_logdrain_custom_enabled":false,"logdrain_custom_config":null,"logdrain_custom_config_parser":null,"concurrent_builds":2,"dynamic_timeout":3600,"force_disabled":false,"is_metrics_enabled":false,"generate_exact_labels":false,"force_docker_cleanup":true,"docker_cleanup_frequency":"0 *\/6 * * *","docker_cleanup_threshold":75,"server_timezone":"UTC","delete_unused_volumes":false,"delete_unused_networks":false,"is_sentinel_enabled":true,"sentinel_token":"eyJpdiI6Ii9MSGRUb1JDWDZUSGE2b2dPVU5ka2c9PSIsInZhbHVlIjoiRVVkYXBZYmtIenRtTVBqK01GRnhJNERrT3RwLzhYK3EwT2hIM2JtOS9TeGdZNEl2VWRHczBHYXgzQTJ4UnpJTkluVU1RRXF1SVVXREZBZVpyaU1TZEE9PSIsIm1hYyI6IjdjZjYxNmEzZTM2OThjYjA4MGVlYzBkOGZlOGNmOTU1ZTA5MjJmZTY5ZGQ5OTczZWRkYTRkZDQ0ZDMzY2VjNzciLCJ0YWciOiIifQ==","sentinel_metrics_refresh_rate_seconds":10,"sentinel_metrics_history_days":7,"sentinel_push_interval_seconds":60,"sentinel_custom_url":"http:\/\/host.docker.internal:8000","server_disk_usage_notification_threshold":80,"is_sentinel_debug_enabled":false,"server_disk_usage_check_frequency":"0 23 * * *","is_terminal_enabled":true,"deployment_queue_limit":25,"disable_application_image_retention":false}}}}],"description":null,"mariadbs":[],"mongodbs":[],"mysqls":[],"postgresqls":[{"id":2,"uuid":"kggs4ogckc0w8ggwkkk88kck","name":"vibn-postgres","description":"VIBN unified database - replaces Firebase + Railway","postgres_user":"vibn_user","postgres_password":"JSMcySGlEj3pSMjHvwEHAd1A","postgres_db":"vibn","postgres_initdb_args":"--encoding=UTF8 --locale=C","postgres_host_auth_method":"scram-sha-256","init_scripts":null,"status":"running:healthy","image":"postgres:16-alpine","is_public":true,"public_port":5433,"ports_mappings":null,"limits_memory":"0","limits_memory_swap":"0","limits_memory_swappiness":60,"limits_memory_reservation":"0","limits_cpus":"0","limits_cpuset":null,"limits_cpu_shares":1024,"started_at":"2026-02-18 00:58:28","destination_type":"App\\Models\\StandaloneDocker","destination_id":0,"environment_id":1,"created_at":"2026-02-16T03:41:27.000000Z","updated_at":"2026-05-15T20:42:32.000000Z","postgres_conf":null,"is_log_drain_enabled":false,"is_include_timestamps":false,"deleted_at":null,"config_hash":"651bd3ba4d41c9880769c26675e79f87","custom_docker_run_options":null,"last_online_at":"2026-05-15 20:42:32","enable_ssl":false,"ssl_mode":"require","restart_count":0,"last_restart_at":null,"last_restart_type":null,"public_port_timeout":3600,"internal_db_url":"postgres:\/\/vibn_user:JSMcySGlEj3pSMjHvwEHAd1A@kggs4ogckc0w8ggwkkk88kck:5432\/vibn","external_db_url":"postgres:\/\/vibn_user:JSMcySGlEj3pSMjHvwEHAd1A@34.19.250.135:5433\/vibn","database_type":"standalone-postgresql","server_status":true,"destination":{"id":0,"name":"coolify","uuid":"zkogkggkw0wg40gccks80oo0","network":"coolify","server_id":0,"created_at":"2026-02-14T21:41:51.000000Z","updated_at":"2026-02-14T21:41:51.000000Z","server":{"id":0,"uuid":"jws4g4cgssss4cw48s488woc","name":"localhost","description":"This is the server where Coolify is running on. Don't delete this!","ip":"host.docker.internal","port":22,"user":"root","team_id":0,"private_key_id":0,"proxy":{"type":"TRAEFIK","status":"running","last_saved_settings":null,"last_applied_settings":null,"redirect_enabled":true,"force_stop":false},"created_at":"2026-02-14T21:41:51.000000Z","updated_at":"2026-05-15T20:42:32.000000Z","unreachable_notification_sent":false,"unreachable_count":0,"high_disk_usage_notification_sent":false,"log_drain_notification_sent":false,"swarm_cluster":null,"validation_logs":null,"sentinel_updated_at":"2026-05-15 20:42:32","deleted_at":null,"ip_previous":null,"hetzner_server_id":null,"cloud_provider_token_id":null,"hetzner_server_status":null,"is_validating":false,"detected_traefik_version":"3.6.8","traefik_outdated_info":{"current":"3.6.8","latest":"3.6.11","type":"patch_update","checked_at":"2026-05-10T00:00:42+00:00"},"server_metadata":null,"is_coolify_host":true,"settings":{"id":1,"is_swarm_manager":false,"is_jump_server":false,"is_build_server":false,"is_reachable":true,"is_usable":true,"server_id":0,"created_at":"2026-02-14T21:41:51.000000Z","updated_at":"2026-02-14T21:49:13.000000Z","wildcard_domain":null,"is_cloudflare_tunnel":false,"is_logdrain_newrelic_enabled":false,"logdrain_newrelic_license_key":null,"logdrain_newrelic_base_uri":null,"is_logdrain_highlight_enabled":false,"logdrain_highlight_project_id":null,"is_logdrain_axiom_enabled":false,"logdrain_axiom_dataset_name":null,"logdrain_axiom_api_key":null,"is_swarm_worker":false,"is_logdrain_custom_enabled":false,"logdrain_custom_config":null,"logdrain_custom_config_parser":null,"concurrent_builds":2,"dynamic_timeout":3600,"force_disabled":false,"is_metrics_enabled":false,"generate_exact_labels":false,"force_docker_cleanup":true,"docker_cleanup_frequency":"0 *\/6 * * *","docker_cleanup_threshold":75,"server_timezone":"UTC","delete_unused_volumes":false,"delete_unused_networks":false,"is_sentinel_enabled":true,"sentinel_token":"eyJpdiI6Ii9MSGRUb1JDWDZUSGE2b2dPVU5ka2c9PSIsInZhbHVlIjoiRVVkYXBZYmtIenRtTVBqK01GRnhJNERrT3RwLzhYK3EwT2hIM2JtOS9TeGdZNEl2VWRHczBHYXgzQTJ4UnpJTkluVU1RRXF1SVVXREZBZVpyaU1TZEE9PSIsIm1hYyI6IjdjZjYxNmEzZTM2OThjYjA4MGVlYzBkOGZlOGNmOTU1ZTA5MjJmZTY5ZGQ5OTczZWRkYTRkZDQ0ZDMzY2VjNzciLCJ0YWciOiIifQ==","sentinel_metrics_refresh_rate_seconds":10,"sentinel_metrics_history_days":7,"sentinel_push_interval_seconds":60,"sentinel_custom_url":"http:\/\/host.docker.internal:8000","server_disk_usage_notification_threshold":80,"is_sentinel_debug_enabled":false,"server_disk_usage_check_frequency":"0 23 * * *","is_terminal_enabled":true,"deployment_queue_limit":25,"disable_application_image_retention":false}}}}],"project_id":1,"redis":[],"services":[{"id":2,"uuid":"o4wwck0g0c04wgoo4g4s0004","name":"gitea","environment_id":1,"created_at":"2026-02-27T19:03:58.000000Z","updated_at":"2026-03-07T21:52:00.000000Z","server_id":1,"description":"","docker_compose_raw":"services:\n gitea:\n image: 'gitea\/gitea:latest'\n environment:\n - SERVICE_FQDN_GITEA_3000=git.vibnai.com\n - USER_UID=1000\n - USER_GID=1000\n - 'GITEA__server__ROOT_URL=https:\/\/git.vibnai.com\/'\n - GITEA__server__DOMAIN=git.vibnai.com\n - GITEA__server__SSH_DOMAIN=git.vibnai.com\n - GITEA__security__INSTALL_LOCK=true\n ports:\n - '22222:22'\n volumes:\n - 'gitea-data:\/data'\n - 'gitea-timezone:\/etc\/timezone:ro'\n - 'gitea-localtime:\/etc\/localtime:ro'\n healthcheck:\n test:\n - CMD\n - curl\n - '-f'\n - 'http:\/\/127.0.0.1:3000'\n interval: 2s\n timeout: 10s\n retries: 15\n","docker_compose":"services:\n gitea:\n image: 'gitea\/gitea:latest'\n environment:\n USER_UID: '1000'\n USER_GID: '1000'\n GITEA__server__ROOT_URL: 'https:\/\/git.vibnai.com\/'\n GITEA__server__DOMAIN: git.vibnai.com\n GITEA__server__SSH_DOMAIN: git.vibnai.com\n GITEA__security__INSTALL_LOCK: 'true'\n COOLIFY_RESOURCE_UUID: o4wwck0g0c04wgoo4g4s0004\n COOLIFY_CONTAINER_NAME: gitea-o4wwck0g0c04wgoo4g4s0004\n COOLIFY_FQDN: git.vibnai.com\n COOLIFY_URL: 'https:\/\/git.vibnai.com'\n SERVICE_NAME_GITEA: gitea\n ports:\n - '22222:22'\n volumes:\n - 'o4wwck0g0c04wgoo4g4s0004_gitea-data:\/data'\n - 'o4wwck0g0c04wgoo4g4s0004_gitea-timezone:\/etc\/timezone:ro'\n - 'o4wwck0g0c04wgoo4g4s0004_gitea-localtime:\/etc\/localtime:ro'\n healthcheck:\n test:\n - CMD\n - curl\n - '-f'\n - 'http:\/\/127.0.0.1:3000'\n interval: 2s\n timeout: 10s\n retries: 15\n container_name: gitea-o4wwck0g0c04wgoo4g4s0004\n restart: unless-stopped\n labels:\n - coolify.managed=true\n - coolify.version=4.0.0-beta.463\n - coolify.serviceId=2\n - coolify.type=service\n - coolify.name=gitea-o4wwck0g0c04wgoo4g4s0004\n - coolify.resourceName=gitea\n - coolify.projectName=vibn\n - coolify.serviceName=gitea\n - coolify.environmentName=production\n - coolify.pullRequestId=0\n - coolify.service.subId=2\n - coolify.service.subType=application\n - coolify.service.subName=gitea\n - traefik.enable=true\n - traefik.http.middlewares.gzip.compress=true\n - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https\n - traefik.http.routers.http-0-o4wwck0g0c04wgoo4g4s0004-gitea.entryPoints=http\n - traefik.http.routers.http-0-o4wwck0g0c04wgoo4g4s0004-gitea.middlewares=redirect-to-https\n - 'traefik.http.routers.http-0-o4wwck0g0c04wgoo4g4s0004-gitea.rule=Host(`git.vibnai.com`) && PathPrefix(`\/`)'\n - traefik.http.routers.https-0-o4wwck0g0c04wgoo4g4s0004-gitea.entryPoints=https\n - traefik.http.routers.https-0-o4wwck0g0c04wgoo4g4s0004-gitea.middlewares=gzip\n - 'traefik.http.routers.https-0-o4wwck0g0c04wgoo4g4s0004-gitea.rule=Host(`git.vibnai.com`) && PathPrefix(`\/`)'\n - traefik.http.routers.https-0-o4wwck0g0c04wgoo4g4s0004-gitea.tls.certresolver=letsencrypt\n - traefik.http.routers.https-0-o4wwck0g0c04wgoo4g4s0004-gitea.tls=true\n - 'caddy_0.encode=zstd gzip'\n - 'caddy_0.handle_path.0_reverse_proxy={{upstreams}}'\n - 'caddy_0.handle_path=\/*'\n - caddy_0.header=-Server\n - 'caddy_0.try_files={path} \/index.html \/index.php'\n - 'caddy_0=https:\/\/git.vibnai.com'\n - caddy_ingress_network=o4wwck0g0c04wgoo4g4s0004\n networks:\n o4wwck0g0c04wgoo4g4s0004: null\n env_file:\n - .env\nvolumes:\n o4wwck0g0c04wgoo4g4s0004_gitea-data:\n name: o4wwck0g0c04wgoo4g4s0004_gitea-data\n o4wwck0g0c04wgoo4g4s0004_gitea-timezone:\n name: o4wwck0g0c04wgoo4g4s0004_gitea-timezone\n o4wwck0g0c04wgoo4g4s0004_gitea-localtime:\n name: o4wwck0g0c04wgoo4g4s0004_gitea-localtime\nnetworks:\n o4wwck0g0c04wgoo4g4s0004:\n name: o4wwck0g0c04wgoo4g4s0004\n external: true\n","destination_type":"App\\Models\\StandaloneDocker","destination_id":1,"deleted_at":null,"connect_to_docker_network":false,"config_hash":"81f7a40a55892337fca90c5b1a01171a","service_type":"gitea","is_container_label_escape_enabled":true,"compose_parsing_version":"5","server_status":true,"status":"running:healthy","server":{"id":1,"uuid":"zg4cwgc44ogc08804000gggo","name":"coolify-server-mtl","description":"","ip":"34.19.250.135","port":22,"user":"root","team_id":0,"private_key_id":0,"proxy":{"type":"TRAEFIK","status":"running","redirect_enabled":true},"created_at":"2026-02-15T01:48:10.000000Z","updated_at":"2026-05-10T00:00:40.000000Z","unreachable_notification_sent":false,"unreachable_count":0,"high_disk_usage_notification_sent":false,"log_drain_notification_sent":false,"swarm_cluster":null,"validation_logs":null,"sentinel_updated_at":"2026-02-14 21:41:49","deleted_at":null,"ip_previous":"127.0.0.1","hetzner_server_id":null,"cloud_provider_token_id":null,"hetzner_server_status":null,"is_validating":false,"detected_traefik_version":"3.6.8","traefik_outdated_info":{"current":"3.6.8","latest":"3.6.11","type":"patch_update","checked_at":"2026-05-10T00:00:40+00:00"},"server_metadata":null,"is_coolify_host":false,"settings":{"id":2,"is_swarm_manager":false,"is_jump_server":false,"is_build_server":false,"is_reachable":true,"is_usable":true,"server_id":1,"created_at":"2026-02-15T01:48:10.000000Z","updated_at":"2026-02-28T00:11:02.000000Z","wildcard_domain":null,"is_cloudflare_tunnel":false,"is_logdrain_newrelic_enabled":false,"logdrain_newrelic_license_key":null,"logdrain_newrelic_base_uri":null,"is_logdrain_highlight_enabled":false,"logdrain_highlight_project_id":null,"is_logdrain_axiom_enabled":false,"logdrain_axiom_dataset_name":null,"logdrain_axiom_api_key":null,"is_swarm_worker":false,"is_logdrain_custom_enabled":false,"logdrain_custom_config":null,"logdrain_custom_config_parser":null,"concurrent_builds":2,"dynamic_timeout":3600,"force_disabled":false,"is_metrics_enabled":false,"generate_exact_labels":false,"force_docker_cleanup":true,"docker_cleanup_frequency":"0 *\/6 * * *","docker_cleanup_threshold":75,"server_timezone":"UTC","delete_unused_volumes":false,"delete_unused_networks":false,"is_sentinel_enabled":true,"sentinel_token":"eyJpdiI6InM0cFNzelpxWkFCY0JSL0RyeXhqTVE9PSIsInZhbHVlIjoiaFI1NWhwTE1JNEtQQ1V3L0dsVWJwUzlFUUlQakdjbG5xekNFRDQ1S0c0TUxWSWtVelE4amFXa1BhMGxBaXIvdUx0SjlMZnlWS2liNklzR3ViaHdYRkE9PSIsIm1hYyI6ImExYTRlZGMxMWJkZWQyZjk0OWJjZDA0OTdiNmNjNzk0YTYzZDljZjBhNTQ5ZDgxMzEzNWExNjliNmU3ZTE1NWEiLCJ0YWciOiIifQ==","sentinel_metrics_refresh_rate_seconds":10,"sentinel_metrics_history_days":7,"sentinel_push_interval_seconds":60,"sentinel_custom_url":"http:\/\/34.19.250.135:8000","server_disk_usage_notification_threshold":80,"is_sentinel_debug_enabled":false,"server_disk_usage_check_frequency":"0 23 * * *","is_terminal_enabled":true,"deployment_queue_limit":25,"disable_application_image_retention":false}},"applications":[{"id":2,"uuid":"g440wws48sow8ggwo8kw08c0","name":"gitea","human_name":null,"description":null,"fqdn":"https:\/\/git.vibnai.com","ports":"22222:22","exposes":null,"status":"running:healthy","service_id":2,"created_at":"2026-02-27T19:03:58.000000Z","updated_at":"2026-05-15T20:42:06.000000Z","exclude_from_status":false,"required_fqdn":false,"image":"gitea\/gitea:latest","is_log_drain_enabled":false,"is_include_timestamps":false,"deleted_at":null,"is_gzip_enabled":true,"is_stripprefix_enabled":true,"last_online_at":"2026-05-15 20:42:06","is_migrated":false}],"databases":[]}],"created_at":"2026-02-14T21:49:21.000000Z","updated_at":"2026-02-14T21:49:21.000000Z"}