|
tests / pest (push) Failing after 9m49s
Details
tests / assets (push) Successful in 21s
Details
tests / release (push) Has been skipped
Details
Two complaints, one cause: the customer page was a compose box with three
lists under it. It showed nothing ABOUT the customer, and every answer was
typed from scratch.
The page is five tabs now. Stammdaten — contact, phone, since when,
language, and the tax standing: consumer or business, with "nobody asked"
saying so rather than passing for business, because that answer decides
whether a withdrawal right exists at all. Paket — the contract's own
FROZEN figures, the modules at the price they were booked at, and the
machine: address, state, host, datacenter. Zahlungen — invoices with net,
gross and their PDF, and the orders beside them, because an order is a
purchase and an invoice is a document about one. Nachrichten — the portal
requests in the customer's own words, the mail they sent, the mail we
sent. Schreiben — last, because it is what you do after reading.
The tab is in the query string, like Settings and Integrations: a reload,
a bookmark and the back button all land where the operator was, and a link
can point at the tab that matters.
And templates, under Betrieb → E-Mail-Vorlagen. Most customer questions
are the same five questions, and typing the answer again every time is how
two customers get told two different things about one subject. A template
is INSERTED into the compose field with the customer's own details filled
in — never sent as it stands, because the last two sentences always belong
to the person asking. What goes out is what the operator saw and edited.
Three decisions worth naming. {{contact}} takes the contact person where
one is on record and the company name otherwise, because "Guten Tag
Beispiel GmbH" is the line that gives away a mail written by a database.
{{amount}} is the gross figure — what the price sheet quoted them and what
their bank statement says. And a typo comes out as {{kunde}}, standing
there in the field where the operator sees it, rather than as an empty
string that produces "Guten Tag ,". A placeholder with no value for this
customer stays empty; nothing is invented.
Placeholders are named in English because they are identifiers, not prose:
a template has to survive somebody switching the console's language. The
list the page documents is the renderer's own, so a token added in one
place appears in the other without being written down twice.
Blade's echo tag ends at the first }} it finds, which turned a literal
placeholder in the documentation into compiled nonsense. Assembled in PHP
now, and caught by the test that renders the page rather than by somebody
opening it.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
||
|---|---|---|
| .. | ||
| 0001_01_01_000000_create_users_table.php | ||
| 0001_01_01_000001_create_cache_table.php | ||
| 0001_01_01_000002_create_jobs_table.php | ||
| 2026_07_24_224530_add_two_factor_columns_to_users_table.php | ||
| 2026_07_24_224531_create_passkeys_table.php | ||
| 2026_07_25_062321_add_is_admin_to_users_table.php | ||
| 2026_07_25_070001_create_hosts_table.php | ||
| 2026_07_25_070002_create_provisioning_runs_table.php | ||
| 2026_07_25_070003_create_provisioning_step_events_table.php | ||
| 2026_07_25_070004_create_run_resources_table.php | ||
| 2026_07_25_070005_add_unique_wg_ip_to_hosts_table.php | ||
| 2026_07_25_070006_add_unique_public_ip_to_hosts_table.php | ||
| 2026_07_25_080001_create_customers_table.php | ||
| 2026_07_25_080002_create_orders_table.php | ||
| 2026_07_25_080003_create_instances_table.php | ||
| 2026_07_25_080004_create_dns_records_table.php | ||
| 2026_07_25_080005_create_backups_table.php | ||
| 2026_07_25_080006_create_monitoring_targets_table.php | ||
| 2026_07_25_080007_create_onboarding_tasks_table.php | ||
| 2026_07_25_080008_add_node_to_hosts_table.php | ||
| 2026_07_25_080009_add_guest_ip_to_instances_table.php | ||
| 2026_07_25_080010_add_unique_email_to_customers_table.php | ||
| 2026_07_25_090001_create_datacenters_table.php | ||
| 2026_07_25_090002_add_type_to_orders_table.php | ||
| 2026_07_25_090003_add_user_id_to_customers_table.php | ||
| 2026_07_25_090004_make_customer_identity_unique.php | ||
| 2026_07_25_090005_add_profile_and_branding_to_customers.php | ||
| 2026_07_25_090006_add_cancellation_to_instances.php | ||
| 2026_07_25_090007_create_seats_table.php | ||
| 2026_07_25_090008_add_datacenter_fk_to_hosts.php | ||
| 2026_07_25_133845_create_permission_tables.php | ||
| 2026_07_25_133900_seed_roles_and_permissions.php | ||
| 2026_07_25_140001_create_maintenance_windows.php | ||
| 2026_07_25_140002_add_claimed_at_to_maintenance_notifications.php | ||
| 2026_07_25_200000_create_vpn_peers_table.php | ||
| 2026_07_25_200001_add_vpn_manage_capability.php | ||
| 2026_07_25_210000_add_ownership_to_vpn_peers.php | ||
| 2026_07_25_210001_split_vpn_capabilities.php | ||
| 2026_07_25_220000_create_app_settings_table.php | ||
| 2026_07_25_220001_add_site_manage_capability.php | ||
| 2026_07_25_230000_create_instance_traffic_table.php | ||
| 2026_07_25_230001_add_traffic_addons_to_instances.php | ||
| 2026_07_25_240000_add_dns_name_to_hosts_table.php | ||
| 2026_07_26_000000_add_instance_admin_capability.php | ||
| 2026_07_26_010000_add_vat_verification_to_customers.php | ||
| 2026_07_26_010001_bind_vat_verification_to_value.php | ||
| 2026_07_26_020000_create_subscriptions_table.php | ||
| 2026_07_26_020001_add_tier_to_subscriptions.php | ||
| 2026_07_26_030000_link_subscriptions_to_orders.php | ||
| 2026_07_26_040000_create_plan_catalogue_tables.php | ||
| 2026_07_26_040001_link_subscriptions_to_plan_versions.php | ||
| 2026_07_26_040002_add_plan_version_to_orders.php | ||
| 2026_07_26_050000_add_plans_manage_capability.php | ||
| 2026_07_26_060000_create_subscription_addons_table.php | ||
| 2026_07_26_060001_create_subscription_records_table.php | ||
| 2026_07_26_070000_link_subscriptions_to_stripe.php | ||
| 2026_07_26_070001_one_register_entry_per_billing_event.php | ||
| 2026_07_26_070002_track_last_applied_stripe_event.php | ||
| 2026_07_26_070003_create_stripe_pending_events_table.php | ||
| 2026_07_27_040000_record_when_monitoring_last_answered.php | ||
| 2026_07_27_060000_create_app_secrets_table.php | ||
| 2026_07_27_060100_add_secrets_capability.php | ||
| 2026_07_27_150000_create_instance_metrics_table.php | ||
| 2026_07_27_160000_add_checks_to_instance_metrics.php | ||
| 2026_07_27_180000_create_support_requests_table.php | ||
| 2026_07_28_090000_create_mailboxes_table.php | ||
| 2026_07_28_095000_add_authenticates_to_mailboxes_table.php | ||
| 2026_07_28_100000_seed_mailboxes_from_environment.php | ||
| 2026_07_28_110000_add_mail_manage_permission.php | ||
| 2026_07_29_090000_create_operators_table.php | ||
| 2026_07_29_100000_move_rbac_to_operator_guard.php | ||
| 2026_07_29_110000_add_facility_to_datacenters_table.php | ||
| 2026_07_29_120000_add_admin_password_to_instances_table.php | ||
| 2026_07_29_120000_create_sessions_and_device_tables.php | ||
| 2026_07_29_130000_create_invoice_tables.php | ||
| 2026_07_29_140000_add_export_state_to_invoices.php | ||
| 2026_07_29_150000_create_export_targets.php | ||
| 2026_07_29_170000_add_layout_and_retention_to_export_targets.php | ||
| 2026_07_29_180000_add_grant_provenance_to_subscriptions.php | ||
| 2026_07_29_180001_add_grant_provenance_to_subscription_addons.php | ||
| 2026_07_29_180002_add_grant_plans_capability.php | ||
| 2026_07_29_200000_create_status_history.php | ||
| 2026_07_29_210000_add_recommended_flag_to_plan_families.php | ||
| 2026_07_29_210001_add_marketing_copy_to_plan_families.php | ||
| 2026_07_29_220000_add_domain_verification_to_instances.php | ||
| 2026_07_29_230000_add_address_state_to_instances.php | ||
| 2026_07_29_230000_move_instances_to_their_own_zone.php | ||
| 2026_07_29_240000_add_pending_restart_to_instances.php | ||
| 2026_07_29_250000_add_instance_restart_capability.php | ||
| 2026_07_29_260000_add_applied_quota_to_instances.php | ||
| 2026_07_29_270000_link_invoices_to_the_period_they_bill.php | ||
| 2026_07_29_280000_track_the_stripe_price_a_contract_is_billed_at.php | ||
| 2026_07_29_290000_bill_modules_through_stripe.php | ||
| 2026_07_29_300000_record_whether_a_customer_is_a_consumer.php | ||
| 2026_07_29_300001_add_the_withdrawal_window_to_contracts.php | ||
| 2026_07_30_100000_record_every_mail_that_left_the_system.php | ||
| 2026_07_30_200000_read_the_support_mailbox_into_the_console.php | ||
| 2026_07_31_100000_write_the_answers_once_and_reuse_them.php | ||