..
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(billing): hold only what cannot be matched, and let migrations roll back
2026-07-26 13:57:11 +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
2026_07_25_230000_create_instance_traffic_table.php
feat(traffic): meter the monthly allowance, show it, throttle instead of blocking
2026-07-25 23:33:47 +02:00
2026_07_25_230001_add_traffic_addons_to_instances.php
feat(traffic): meter the monthly allowance, show it, throttle instead of blocking
2026-07-25 23:33:47 +02:00
2026_07_25_240000_add_dns_name_to_hosts_table.php
feat(hosts): give each host a DNS name under the public zone
2026-07-25 23:49:18 +02:00
2026_07_26_000000_add_instance_admin_capability.php
feat(admin): administrator access to a customer's Nextcloud
2026-07-26 05:30:59 +02:00
2026_07_26_010000_add_vat_verification_to_customers.php
fix(billing): a self-declared VAT ID must not zero the tax
2026-07-26 09:32:42 +02:00
2026_07_26_010001_bind_vat_verification_to_value.php
fix(billing): verification vouches for a value, not for a row
2026-07-26 09:34:40 +02:00
2026_07_26_020000_create_subscriptions_table.php
feat(billing): immutable subscription snapshots and pro-rata plan changes
2026-07-26 09:49:48 +02:00
2026_07_26_020001_add_tier_to_subscriptions.php
fix(billing): upgrade or downgrade is decided by rank, not by price
2026-07-26 09:52:28 +02:00
2026_07_26_030000_link_subscriptions_to_orders.php
feat(billing): the plan catalogue becomes three tables, and config stops selling
2026-07-26 12:05:56 +02:00
2026_07_26_040000_create_plan_catalogue_tables.php
feat(billing): the plan catalogue becomes three tables, and config stops selling
2026-07-26 12:05:56 +02:00
2026_07_26_040001_link_subscriptions_to_plan_versions.php
feat(billing): the plan catalogue becomes three tables, and config stops selling
2026-07-26 12:05:56 +02:00
2026_07_26_040002_add_plan_version_to_orders.php
feat(billing): the plan catalogue becomes three tables, and config stops selling
2026-07-26 12:05:56 +02:00
2026_07_26_050000_add_plans_manage_capability.php
feat(admin): a console for creating, pricing and scheduling plans
2026-07-26 12:41:51 +02:00
2026_07_26_060000_create_subscription_addons_table.php
feat(billing): a proof register, and modules frozen at their booked price
2026-07-26 13:07:34 +02:00
2026_07_26_060001_create_subscription_records_table.php
feat(billing): Stripe owns the billing cycle, we own capability
2026-07-26 13:36:28 +02:00
2026_07_26_070000_link_subscriptions_to_stripe.php
feat(billing): Stripe owns the billing cycle, we own capability
2026-07-26 13:36:28 +02:00
2026_07_26_070001_one_register_entry_per_billing_event.php
feat(billing): Stripe owns the billing cycle, we own capability
2026-07-26 13:36:28 +02:00
2026_07_26_070002_track_last_applied_stripe_event.php
feat(billing): Stripe owns the billing cycle, we own capability
2026-07-26 13:36:28 +02:00
2026_07_26_070003_create_stripe_pending_events_table.php
feat(billing): Stripe owns the billing cycle, we own capability
2026-07-26 13:36:28 +02:00
2026_07_27_040000_record_when_monitoring_last_answered.php
Move the console off /admin, give the status page its own address, and measure monitoring
2026-07-27 06:05:40 +02:00
2026_07_27_060000_create_app_secrets_table.php
Manage the Stripe key from the console, behind a password and a test
2026-07-27 09:01:16 +02:00
2026_07_27_060100_add_secrets_capability.php
Manage the Stripe key from the console, behind a password and a test
2026-07-27 09:01:16 +02:00
2026_07_27_150000_create_instance_metrics_table.php
Measure what the template draws
2026-07-27 16:29:28 +02:00