Skip to content

Kaleta 3.0.0

Choose a tag to compare

@github-actions github-actions released this 03 Oct 10:02
· 644 commits to main since this release

Kaleta 3.0 opens up. Developers can write add-ons, visitors can book appointments, and sites move in from Ghost, Blogger, Joomla, Drupal and Webflow.

It is a major version because it reverses three decisions recorded under "Not planned". Every 2.x site updates to it as usual: nothing is removed, and every MCP tool, builder element and design token keeps working.

Add-ons and the extension API

  • Developers write add-ons. An add-on is a folder in extensions/<slug>/ with a manifest and a class. It hooks into Kaleta through a stable, versioned API:
    • events, such as an enquiry received or a page published;
    • filters for the page head, the footer and the whole page;
    • text tokens {{ext.<slug>.<name>}};
    • administration pages;
    • tools for Claude, which go through the connection's access, the guardrails and session undo like Kaleta's own tools;
    • background jobs;
    • their own settings.
  • Add-ons (Administration) lists what is in extensions/, says why an add-on cannot run, and switches add-ons on after the administrator confirms they trust the code.
  • An add-on that fails while loading is switched off at once and its error is shown. 'addons' => false in config.php is a safe mode. Add-ons never run in the public demo.
  • Kaleta never uploads or downloads code itself.
  • The API is a recorded contract (tools/contracts/extension-api.json, API version 1) that holds through 3.x.
  • The guide for developers is docs/EXTENSIONS.md, and an example add-on is in docs/examples/extensions/hello/.

Online booking of appointments

  • Bookings (Content) holds services (length, buffer, price text), the people who provide them with their weekly hours and days off, and the bookings themselves.
  • People without their own hours use the site's opening hours, and the site's closed days apply to everyone.
  • The new Booking element lets a visitor pick a service, a person or anyone, a day in a month calendar and a free time, then leave name, e-mail and phone. It also works without JavaScript.
  • The free times respect:
    • lunch breaks and days off;
    • existing bookings with their buffers;
    • a minimum lead time and a booking horizon;
    • daylight-saving days.
  • The same slot cannot be booked twice: the check runs again inside a locked transaction.
  • E-mails:
    • a confirmation with a cancel link and a calendar file;
    • a notification to the person and the site;
    • a reminder before the appointment;
    • a cancellation notice.
  • No payments.
  • Bookings follow the enquiry retention (deleted or anonymised) and are part of personal data requests.
  • Claude: list_bookings (every read is logged), booking_availability, save_booking_service, save_booking_staff, cancel_booking.

Moving in from other systems

Import and export → From another system has a common importer:

  1. It reads the export.
  2. It shows a preview with counts, sample titles and warnings.
  3. It asks what becomes news, pages, categories and tags, and which authors map to which users.
  4. It imports in batches, downloads the images and creates redirects from the old addresses. The redirects also fix the site's own links.

A second import adds nothing new.

  • Ghost: the JSON export, including Lexical content.
  • Blogger: the Atom backup. Labels become tags; comments are skipped.
  • Joomla and Drupal: read through the site's own API (Joomla Web Services, Drupal JSON:API). An access token you type is used only for the fetch and is never stored.
  • Webflow: the CSV export of a CMS collection. Static pages come through the URL importer.
  • WordPress keeps its own importer.

Also in 3.0

Tabs in the administration are pills at every width: they wrap on a wide screen and scroll in one row on a phone.

Updating

Update from Settings → Backups and updates. It works from every earlier release. The update adds the booking tables.

Add-ons need nothing until you put one into extensions/.