Portal Release Notes¶
This page tracks notable changes to the Servala Portal: new features, improvements, and bugfixes, newest first.
2026.07.15¶
New features¶
- Safer organization deletion. Expired trial or unpaid organizations are no longer decommissioned without a recorded warning: a warning email is now a hard precondition for deletion, and the grace period is measured in business days from when that warning was actually sent.
Improvements¶
- Dates and times are now shown consistently in your browser's local time zone across the whole portal.
- Pod logs now render colored terminal output instead of raw escape sequences.
- Staff: the organization detail view now shows a trial and deletion lifecycle timeline, extended to cover more organizations, with preview modals for the related notification emails.
Bugfixes¶
- Fixed an intermittent error where a slow or unreachable Kubernetes cluster connection could hang and crash a portal server process.
- Fixed pod logs occasionally showing a raw byte-string wrapper instead of decoded text.
- Fixed the delete confirmation dialog showing literal formatting tags instead of the highlighted instance name.
2026.07.07¶
New features¶
- Staff approval for new organizations. New organizations created through public signup now wait for staff approval before any billing records are created, protecting signup against abuse. Pending organizations see an "awaiting approval" dashboard and are hidden from the organization switcher, support, and deep links until a staff member approves them. On approval the billing data is provisioned and the owner is notified by email; rejections are recorded and the owner is informed. Trusted origins and vouchers can waive the approval step. Staff can review, approve, or reject pending organizations, and link existing Odoo records at approval time to avoid duplicates.
- Automated trial cleanup. Expired trial organizations are now paused automatically at expiration and decommissioned after a configurable grace period. Both moments are scheduled for weekday business hours (10:00 Europe/Zurich) so stopped services surface during support hours, and reminder, warning, and confirmation emails keep owners informed. Trials are never shortened or invoiced by the cleanup.
Improvements¶
- Notification and reminder emails now point recipients to the support page.
- Staff: helpdesk messages now include direct links back to the relevant staff records.
- Staff: Kubernetes health findings can now be fixed per instance directly from the staff view.
- Staff: the organization detail view now groups its summary into General, Billing, and Limits & trial sections, adds an "Enter organization" button, and lists the five most recent invoices with their payment state and a direct link to the Odoo backend invoice view.
Bugfixes¶
- Fully custom domains are now submitted exactly as entered, instead of having the managed wildcard suffix appended.
- Error pages now render reliably even when the database or Odoo is unavailable.
- Connection credential views no longer display internal
_HOSTSkeys. - Compute-plan size field names are now resolved from the CRD schema, fixing mismatches for services with differing field conventions.
Security¶
- Hardening pass from an automated security review: HTML in support tickets and dynamic form widgets is now escaped, server-controlled hidden CRD form fields are disabled, CRD spec data is schema-validated, invitation acceptance is bound to the invited email and scoped to the requesting organization, delete permissions are enforced on instance deletion, basic-auth comparisons are constant-time, and production now enforces HSTS, SSL redirect, secure cookies, and content-type nosniff, with a fail-safe default to production settings.
Behind the scenes¶
- Background jobs now run through a Postgres-based task runner (Procrastinate) with a worker sidecar, replacing the previous Kubernetes CronJobs; task schedules are configurable via environment variables.
- Added a password-protected, read-only service catalog API endpoint used by the documentation tooling.
- Added a Talos cluster deployment target alongside the existing OpenShift target.
2026.07.02¶
Improvements¶
- Recent instances on the dashboard now show their location.
- Reworded the pricing disclaimer for clarity.
Bugfixes¶
- Fixed viewing pod logs for pods with multiple containers.
2026.06.30¶
New features¶
- Custom domains for managed services. When a service restricts the address to a managed wildcard subdomain, you can now open an "Advanced" option to set your own fully custom domain instead. The dialog explains the DNS and TLS responsibility and shows the CNAME target to point at, and the instance detail page surfaces that CNAME whenever a custom domain is in use.
Improvements¶
- The
/supportlink now takes you straight to your organization's support form: single-organization users go directly, while users in several organizations pick one first. - The live price preview now scales with the replica count, not just storage size, so multi-replica instances show the correct total.
- Configured choice options on numeric fields (such as replica count) now render as a dropdown instead of a free number input.
- Staff: the organization detail view now links directly to the Odoo company and invoice-contact records of a billing entity.
- Behind the scenes: Odoo pricelists and payment terms are now set per sale order, CPU and memory requests sync independently from the billing catalog, and catalog-managed compute plan fields are locked read-only in the admin so they are not overwritten on the next sync.
Bugfixes¶
- Service configuration forms now show a clear error when a control plane's CRD schema cannot be fetched (for example, due to expired cluster credentials), instead of silently displaying no form at all.
2026.06.23¶
New features¶
- Organization onboarding via invitation links. Partners can invite people through a signed invitation link. New users land on a branded welcome page (with the inviting partner's logo) where the organization name and billing are pre-filled, so they can create their organization in a single step. If an organization with that name already exists, they can instead request access from its owners, who are notified by email. Expired links show a clear "link expired" page.
Improvements¶
- Organizations that share the same name are now distinguishable in the organization selector.
- Several refinements to the staff area (instance billing card, Kubernetes and Odoo health cards, instance and organization lists).
- Sign-in now uses PKCE for a more secure Keycloak authentication flow.
- Behind the scenes: organization trial periods and decommission dates now sync to Odoo sale orders, with new trial and decommissioning marker checks in the staff "Check Odoo" tooling, and external billing fields are set on Exoscale sale orders.
2026.06.09¶
Improvements¶
- Added a link to the documentation.
2026.06.01¶
New features¶
- Deep links for service provisioning. Direct links now take you straight into the provisioning flow for a service.
Improvements¶
- Submit buttons are disabled after clicking to prevent accidental double submissions.
Bugfixes¶
- Fixed discovery of Kubernetes CRD plural names.
- Fixed rendering of non-mandatory boolean fields in service configuration forms.
2026.05.29¶
New features¶
- Staff administration views for organizations, service instances, and control planes, including instance details and a billing check directly in the staff organization detail view.
Improvements¶
- The pricing breakdown in the detail view can now be toggled on and off.
- Conditional additional CSP resources are now supported for billing.
- User list now shows the account creation date and last login date.
- Staff organization filter can now narrow down to organizations that have instances.
- Organizations with missing Odoo records are now flagged as critical in the staff view.
- Quick action card now stretches to align with the row above it.
Bugfixes¶
- Fixed a CRD caching issue.
2026.05.21¶
Bugfixes¶
- Prevent accidental creation of duplicate organizations.
- Fixed handling of nested hardcoded parameters in ControlPlane CRDs.
2026.05.20¶
New features¶
- International address support during organization creation and billing.
- Per-organization currency selection when creating an organization.
Improvements¶
- Credential information can now be shown per service definition.
- Refined the display of connection credentials.
- Streamlined Kubernetes API call timeouts for faster, more reliable responses.
Bugfixes¶
- Fixed organization creation when reusing an existing address.
2026.05.06¶
Bugfixes¶
- Fixed a crash in the instance update view when the SLA tier had no initial value.
2026.04.17¶
New features¶
- New pricing model with a billing catalog synced from the Servala website.
- User-facing invoice listings so you can review your invoices in the portal.
Improvements¶
- Indicative pricing hint added to clarify estimated costs.
- More robust Odoo and instance reconciliation tooling for staff.
Bugfixes¶
- Restored the invoice listing that was lost in a bad merge.
2026.03.20¶
New features¶
- Initial experience improvements to make getting started smoother.
Improvements¶
- Enhanced import / export functionality.
2026.03.19¶
New features¶
- Privacy-friendly web analytics (Plausible) integrated.
- Mandatory acceptance of the General Terms and Conditions during organization creation.
Improvements¶
- The price calculator now supports multiple storage fields.
- Service instances now show a "Deploying" status during initial provisioning.
- Ingress CNAME is now auto-generated from the wildcard DNS configuration.
- Added a call to action to request a new service.
- Copyright year in the footer now updates automatically.
2026.03.09¶
New features¶
- User impersonation for support, with a restyled and clearly visible impersonation banner and more useful audit log entries.
- Access to service logs directly from the portal.
- Pause and decommission service instances.
- Voucher system for credits and promotions.
- Live service status on the service detail page, including CPU and memory usage metrics and disk (PVC) usage.
- Organization limits, with a default limit profile configurable on the organization origin.
- Optional logo and display name for organization origins.
- Per-CRD wildcard domain support and hardcoded parameters at the CRD level.
Improvements¶
- Service detail page now lists dependent services, shows zone information by default, and offers a copy-to-clipboard button.
- The "open" button appears dynamically once an instance is ready.
- FQDN field is restricted when wildcard DNS is configured, with a warning when changed.
- Compute plan selection card improved with unit-consistent pricing and totals; plan descriptions are shown where available.
- Clarified that billing is per hour and that backup storage is included; prices now show more decimal places consistently across views.
- Import and export functionality for compute plans.
- Raw JSON toggle for custom service configuration forms; support for CRD additionalProperties in form config and validation.
- Quick button for creating a new service instance.
- Archived organizations are now hidden from the switcher.
- Control plane chooser is disabled when only one is available.
- Faster Kubernetes access through connection pooling and improved static file caching.
Bugfixes¶
- Fixed Django startup hang when Odoo is unreachable.
- Automated emails now use the real URL.
- Fixed dark mode rendering on the zone documentation card and role permissions info box.
- Odoo sync no longer fails when a contact has no parent.
- Instance edit now preserves the disk size.
- Added expiration reminder emails (with a link to the support page).
2025.11.17¶
New features¶
- Exoscale offboarding (MVP).
Improvements¶
- Admins can now disable the expert mode form.
- Support for single (non-array) FQDN values.
2025.11.13¶
New features¶
- Custom form configuration for a curated, user-friendly service configuration experience.
Improvements¶
- "View Availability" renamed to "Get It".
- Added an "open" button to instances that have an FQDN.
- Offering selection is skipped when only one option is available.
- Clearer guidance on how to register an account.
- Billing addresses are now hidden where not needed.
2025.10.27¶
Improvements¶
- Restricted user input to more sensible ranges.
- Inlined user info on the service offering page.
- Smaller login button and updated title.
Bugfixes¶
- Fixed generated FQDN not being submitted.
2025.10.22¶
New features¶
- October feature set rollout.
Improvements¶
- Added a beta banner.
Bugfixes¶
- Fixed a misaligned dashboard table.
2025.10.03¶
New features¶
- Exoscale onboarding API endpoint.
Improvements¶
- Instance URLs now include the instance ID to support duplicate names.
- Footer now displays the version or environment.
- Slight dashboard title update; added a feedback widget.
2025.09.22¶
New features¶
- Organization and global dashboards.
- Support form for contacting the team from within the portal.
- Billing entity management.
- Service instance update and deletion.
- Custom error pages.
Improvements¶
- Consistent card layout and lists across pages.
- CNAME information shown for control planes.
- Redesigned login page and profile/account button; added a favicon.
- Provider name shown in the instance filter dropdown.
- URLs in descriptions are now clickable; alert messages auto-close after a few seconds.
- Refined the support form and improved instance form error handling.
- Empty values are pruned from instance payloads.
Bugfixes¶
- Fixed instance creation breaking due to hidden fields.
- Fixed mandatory field detection.
- Fixed a ValueError and various form bugs.
2025.04.14¶
New features¶
- Initial release of the Servala portal: Django-based multi-tenant SaaS portal with login and registration, organization tenancy, service instance details, and staging deployment.