Kaláka

Modules and extensions

Packaging

flowchart LR
  subgraph EXT["Extension plugins"]
    direction TB
    WC["WooCommerce payments"]
    TI["Price ladder"]
    DE["Deposits"]
    LF["Late fees"]
    AID["Adjudicated aid"]
    SP["Sponsor / church support"]
    MORE["Programs · lodging · check-in ·<br/>wallet · donations · settlement"]
  end
  subgraph CORE["Core plugin"]
    direction TB
    FD["Foundation"]
    EV["Events"]
    FO["Forms"]
    RE["Registry"]
    RU["Rules"]
    LE["Ledger"]
    PA["Payments"]
    MA["Mail"]
    PO["Portal"]
    AD["Admin"]
  end
  WOO[("WooCommerce")]
  EXT -->|"public API only"| CORE
  WC -.->|"implements"| PA
  WOO --- WC

Core modules

Module Responsibility
Foundation runner, audit, clock, evaluation trigger, module registry
Events events, states, timeline points, capacity and the “full” latch; later the participant phase tracker
Forms forms, the registration slot, field types, field definitions, conditions, invitations
Registry registrations, field values, submissions, presets, statuses, waitlist, reference codes
Rules fixed price, fee-component framework, date types, materializer
Ledger lines, balances, organizer-recorded payments
Payments the payments port, payment-method registry
Mail mails, deliveries, the sender
Portal registration access by secret link or account, the account area
Admin data grid, detail views, notes, audit, settings

The Module interface

Schema ownership

Identifiers

The product name is Kaláka. wp_ is reserved for WordPress core and is never our prefix.

What Form
Core plugin kalaka (kalaka/kalaka.php)
Extension plugins kalaka-<name>, e.g. kalaka-woocommerce
PHP namespace Kalaka\<Module>\… for core and extensions alike, so a module moves between plugins unchanged
Composer packages vendor kalaka, not tied to a GitHub organization: kalaka/core, kalaka/woocommerce, …
Tables, options, capabilities, hooks kalaka_ prefix; hooks with underscores like WordPress core
Table names plural like WordPress core, e.g. kalaka_registrations, kalaka_audit_entries
Blocks, abilities kalaka/<name>
Post types kalaka_form, kalaka_field, kalaka_mail
REST namespaces kalaka-admin/v1, kalaka-portal/v1
Repository reformatus/kalaka

Where extensions register REST routes is decided with the first extension that needs one.

Bundled libraries

The extension surface

flowchart LR
  EP["Extension plugin<br/>Requires Plugins: kalaka"] -->|"registers its Module"| REG["Core registry"]
  REG --> IN["Inside the transaction<br/>fee component · payment guard ·<br/>ledger line source · condition · date type"]
  REG --> OUT["Outside the transaction<br/>field type · payment method ·<br/>portal / admin section · evaluation participant"]

Contracts

Alpha phase

While every extension lives in this repository and serves only REFISZ and IVK, and no plugin has been released publicly as open source, the public API may change in breaking ways: a change updates every user in the repository in the same pull request. During alpha, permanence, additive-only changes and the CI compatibility check do not apply; the contract shape above (domain concepts, immutable context objects, our own extension using a point first) does. Alpha ends with the first public release of any plugin. The deprecation period and the compatibility-check tool are chosen then.

Version check

Failure isolation

After-save actions

Public after-save WordPress actions for third-party plugins are deferred. When they are added, they come first among points offered to third parties: stable documented names, an immutable payload, fired after the data is saved, with no effect on core behavior. They are the cheapest promise to keep and what most integrations need (syncing to a CRM, posting to a chat); points that shape behavior or money are the costly ones to keep stable.