← Changelog
v2.5Feature08 April 2026
Deep multi-tenant · templates, rules, and self-service branding
Every tenant edits its own email templates, configures its send rules, defines its branding, manages users with granular roles, and maps its extras. Nothing hardcoded.
Major changes
- Per-tenant editable templates: 9 default ES templates + per-tenant override at /dashboard/settings/email-templates. Available variables inline-documented.
- Send rules: each tenant defines which template fires on which trigger, to which recipients, under which conditions. Stored in EmailRule, executed by EmailService.
- Self-service branding: logo, primary colour, fiscal name, domain. Applied in mini-app, emails, and tenant back-office.
- Granular roles: OWNER / ADMIN / MANAGER / STAFF / READONLY (client) + SUPERADMIN / OPS / SUPPORT / READONLY (platform). Coherent permissions in src/lib/auth/permissions.ts.
- User invitations: the OWNER invites by email; recipient sets password on first login. Token TTL 7 days.
- Editable UpsellProduct catalog: each hotel maps its extras (buggy, transfer, lessons, clubs, locker) with i18n name + price + cost + margin.
Other releases
- v2.9
Reservation engine V2 · staff full-window
The biggest shift of the year. /dashboard/book is now a three-column command center with two-phase commit saga, four-layer pricing, and automatic rollback. Roiback is the first adapter that writes to real hotels.
- v2.8
Metered billing + dark mode + Odoo fiscal
Stripe metered billing with threshold or cycle close. Odoo issues the Spanish fiscal invoice automatically. Dark mode across the app with no hydration flash.
- v2.7
Public self-signup + admin kill-switch
/signup is now a four-step wizard that creates a TRIAL organisation and sends the OWNER invitation. Honeypot + per-IP rate limit. Kill-switch from admin if needed.