CluPilotCloud/database/migrations
nexxo e2b4cdbac4 feat(site): switch the public website and portal off from the console
While the product is still being built, the marketing site and the customer
portal should not be reachable — but they must stay reachable for us.

- A toggle in the console (site.manage, Owner/Admin) stored in a new
  app_settings table, because this has to be flippable without a deploy.
- Outsiders get a placeholder with 503 + noindex, not 200: a 200 invites search
  engines to index the placeholder as the site's content, which is far harder
  to undo than to prevent.
- Anyone on the management VPN, and any signed-in operator, sees the real site.
  The console, Livewire's endpoint, the Stripe webhook and the health check are
  always reachable — otherwise the switch could only be flipped once.
- robots.txt is generated by the app and follows the switch. It had to stop
  being a static file: nginx short-circuited it and Laravel's stock file said
  'Disallow:' with an empty value, so crawlers were never told anything.
- Settings reads fall back to the default when the table is unavailable. The
  gate reads one on every request, so a deploy running new code before migrate
  would otherwise answer the entire site with a 500.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-25 23:10:27 +02:00
..
0001_01_01_000000_create_users_table.php chore: bootstrap CluPilot control-plane (Laravel 13, Docker stack) 2026-07-25 00:21:30 +02:00
0001_01_01_000001_create_cache_table.php chore: bootstrap CluPilot control-plane (Laravel 13, Docker stack) 2026-07-25 00:21:30 +02:00
0001_01_01_000002_create_jobs_table.php chore: bootstrap CluPilot control-plane (Laravel 13, Docker stack) 2026-07-25 00:21:30 +02:00
2026_07_24_224530_add_two_factor_columns_to_users_table.php feat(portal): Fortify auth + Login/2FA/Dashboard + component kit 2026-07-25 01:20:25 +02:00
2026_07_24_224531_create_passkeys_table.php feat(portal): Fortify auth + Login/2FA/Dashboard + component kit 2026-07-25 01:20:25 +02:00
2026_07_25_062321_add_is_admin_to_users_table.php feat(admin): dark Tactical-Terminal operator console 2026-07-25 08:35:03 +02:00
2026_07_25_070001_create_hosts_table.php feat(engine): core provisioning data model + hosts 2026-07-25 09:49:43 +02:00
2026_07_25_070002_create_provisioning_runs_table.php feat(engine): core provisioning data model + hosts 2026-07-25 09:49:43 +02:00
2026_07_25_070003_create_provisioning_step_events_table.php feat(engine): core provisioning data model + hosts 2026-07-25 09:49:43 +02:00
2026_07_25_070004_create_run_resources_table.php feat(engine): core provisioning data model + hosts 2026-07-25 09:49:43 +02:00
2026_07_25_070005_add_unique_wg_ip_to_hosts_table.php fix(engine): address Codex round 2 (poll budget, host error state, wg race) 2026-07-25 10:26:37 +02:00
2026_07_25_070006_add_unique_public_ip_to_hosts_table.php fix(engine): one host per public IP (unique constraint + validation) 2026-07-25 10:43:30 +02:00
2026_07_25_080001_create_customers_table.php feat(engine-b): customer domain models + migrations 2026-07-25 11:38:01 +02:00
2026_07_25_080002_create_orders_table.php feat(engine-b): customer domain models + migrations 2026-07-25 11:38:01 +02:00
2026_07_25_080003_create_instances_table.php feat(engine-b): customer domain models + migrations 2026-07-25 11:38:01 +02:00
2026_07_25_080004_create_dns_records_table.php feat(engine-b): customer domain models + migrations 2026-07-25 11:38:01 +02:00
2026_07_25_080005_create_backups_table.php feat(engine-b): customer domain models + migrations 2026-07-25 11:38:01 +02:00
2026_07_25_080006_create_monitoring_targets_table.php feat(engine-b): customer domain models + migrations 2026-07-25 11:38:01 +02:00
2026_07_25_080007_create_onboarding_tasks_table.php feat(engine-b): customer domain models + migrations 2026-07-25 11:38:01 +02:00
2026_07_25_080008_add_node_to_hosts_table.php feat(engine-b): 15-step customer pipeline + DNS/Traefik services 2026-07-25 11:50:26 +02:00
2026_07_25_080009_add_guest_ip_to_instances_table.php fix(engine-b): address Codex (paid-only stripe, guest routing, absolute disk) 2026-07-25 12:05:31 +02:00
2026_07_25_080010_add_unique_email_to_customers_table.php fix(engine-b): address Codex round 5 (capacity release, activate-last, guest-ip poll, email unique) 2026-07-25 12:19:31 +02:00
2026_07_25_090001_create_datacenters_table.php fix: backfill datacenters on migrate; resolve billing customer by user link 2026-07-25 13:53:06 +02:00
2026_07_25_090002_add_type_to_orders_table.php feat(portal): billing page — current plan, upgrades, extra storage, add-ons 2026-07-25 13:36:52 +02:00
2026_07_25_090003_add_user_id_to_customers_table.php feat(admin): impersonate customer portal — session login + return banner 2026-07-25 13:46:48 +02:00
2026_07_25_090004_make_customer_identity_unique.php fix: unique customer↔user link + reject inactive datacenters on host create 2026-07-25 13:56:07 +02:00
2026_07_25_090005_add_profile_and_branding_to_customers.php feat(portal): settings page — company profile, branding (logo+colors), cancel package, close account 2026-07-25 14:36:52 +02:00
2026_07_25_090006_add_cancellation_to_instances.php feat(portal): settings page — company profile, branding (logo+colors), cancel package, close account 2026-07-25 14:36:52 +02:00
2026_07_25_090007_create_seats_table.php feat(portal): settings page — company profile, branding (logo+colors), cancel package, close account 2026-07-25 14:36:52 +02:00
2026_07_25_090008_add_datacenter_fk_to_hosts.php fix(admin): enforce hosts.datacenter FK (restrictOnDelete) — no deactivation side-effect 2026-07-25 15:00:38 +02:00
2026_07_25_133845_create_permission_tables.php feat(admin): staff RBAC (spatie) + admin settings page 2026-07-25 15:47:42 +02:00
2026_07_25_133900_seed_roles_and_permissions.php fix(admin): in-flight claim (claimed_at) for exactly-once maintenance send; scope permission rollback 2026-07-25 16:38:44 +02:00
2026_07_25_140001_create_maintenance_windows.php feat(admin): maintenance windows — schedule once, assign many hosts, notify 2026-07-25 15:53:50 +02:00
2026_07_25_140002_add_claimed_at_to_maintenance_notifications.php fix(admin): in-flight claim (claimed_at) for exactly-once maintenance send; scope permission rollback 2026-07-25 16:38:44 +02:00
2026_07_25_200000_create_vpn_peers_table.php fix(vpn): stop revoked accesses coming back and stale jobs undoing intent 2026-07-25 21:41:03 +02:00
2026_07_25_200001_add_vpn_manage_capability.php feat(admin): VPN access management with live peer state 2026-07-25 21:38:12 +02:00
2026_07_25_210000_add_ownership_to_vpn_peers.php fix(vpn): classify adopted peers as system, not staff; drop duplicate env line 2026-07-25 22:34:18 +02:00
2026_07_25_210001_split_vpn_capabilities.php feat(vpn): ownership, a Developer role, and password-gated config retrieval 2026-07-25 22:31:54 +02:00
2026_07_25_220000_create_app_settings_table.php feat(site): switch the public website and portal off from the console 2026-07-25 23:10:27 +02:00
2026_07_25_220001_add_site_manage_capability.php feat(site): switch the public website and portal off from the console 2026-07-25 23:10:27 +02:00