CluPilotCloud/resources/views
nexxo f8874f32ea
tests / pest (push) Failing after 8m1s Details
tests / assets (push) Successful in 20s Details
tests / release (push) Has been skipped Details
Put customer instances on their own domain, and say which domains are ours
── The zone ────────────────────────────────────────────────────────────────
A fresh install now addresses customer instances under clupilot.cloud rather
than clupilot.com. Not branding: a Nextcloud is third-party software that
strangers sign in to, and on the same registrable domain as the portal it
shares cookie scope, document.domain and CAA with it. The same reason
googleusercontent.com and vercel.app exist.

Existing installations keep whatever the console says — the zone has been a
setting all along. `clupilot:check-zone <zone>` reports what a change would
touch before anything is touched: the DNS records, the monitoring targets,
the certificates and Nextcloud's trusted_domains all carry the old name and
the setting reaches none of them. With no instances in service it says so and
stops. Changing it later is a migration with an outage, and the command says
that too.

── Which addresses are ours ────────────────────────────────────────────────
A new public page at /sicherheit: the domains that belong to us, the rule for
reading an address bar, what we never do, and — the part that matters — what
to do if you have already typed your password into a copy of our sign-in
form. Change it, end every other session, change it wherever else you use it,
tell us. In that order.

Reachable without an account, deliberately: somebody who has just given their
password away is signed in nowhere, and the page they need cannot be behind
the thing they lost.

Linked from the three places a person is when the question comes up: every
mail footer (the mail is the vector), the sign-in form (this is the page a
phishing kit copies, so the real one says which host you are on), and the
site footer.

The domain list is DERIVED from configuration and keyed by what each domain
is for. A list typed into a page would eventually tell a customer that a
phishing domain is one of ours, or that one of ours is not — the same
two-sources-of-truth failure that had the price sheet promising an address on
a domain the company does not own. The operator console is deliberately
absent from it: naming it on a public page tells an attacker where to aim.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-29 16:03:13 +02:00
..
components Put customer instances on their own domain, and say which domains are ours 2026-07-29 16:03:13 +02:00
errors One wordmark, one typeface, and the address the server actually issues 2026-07-29 14:30:44 +02:00
layouts Give the update screen the product's colours, and only one window 2026-07-29 14:11:01 +02:00
livewire Put customer instances on their own domain, and say which domains are ours 2026-07-29 16:03:13 +02:00
mail Send the invoice with the invoice attached 2026-07-29 02:13:41 +02:00
partials Stop root workers breaking every page, and let the panel be closed 2026-07-29 15:43:54 +02:00
pdf Issue an invoice from what somebody bought, and freeze it there 2026-07-29 02:09:05 +02:00
vendor/wire-elements-modal fix(admin): no admin lockout (is_admin fallback); centered modal width; datacenter edit modal + country dropdown 2026-07-25 18:09:17 +02:00
coming-soon.blade.php One wordmark, one typeface, and the address the server actually issues 2026-07-29 14:30:44 +02:00
landing.blade.php Say EU, and stop promising to fix somebody else's deleted folder 2026-07-29 14:17:30 +02:00
legal.blade.php Rebuild the public website in the shared design system 2026-07-29 11:26:35 +02:00
security.blade.php Put customer instances on their own domain, and say which domains are ours 2026-07-29 16:03:13 +02:00
status.blade.php Rebuild the status page as a status page 2026-07-29 12:45:18 +02:00