Concepts
These pages cover why Porulle is shaped the way it is — the trade-offs considered, the alternatives rejected, the reasoning behind the current architecture.
Read these when you want to deepen your mental model, not when you want to accomplish a specific task. For tasks, head to Building a Store or Extending Porulle. For exact API surface, Reference.
Architecture Kernel, modules, adapters, interfaces — and why the boundaries sit where they do. Start here.
The Entity Model Why one sellable_entities table for products, services, gift cards, subscriptions. Config-driven behavior over code-driven polymorphism.
Plugin Architecture Why plugins are config-transform functions, not class hierarchies. The PayloadCMS lineage.
Hook Pipeline How the checkout pipeline executes, and why the compensation pattern keeps the system consistent under partial failure.
Result Types Why services return Result instead of throwing. The discipline that makes services composable across interfaces.
Identity and Store Resolution How customers, admins, vendors, and anonymous users are identified — and the org resolution profiles that determine how requests find their tenant.