Primary database: MySQL (apps/web/database/migrations/, 122 migrations). Optional ClickHouse for KPI time-series when KPI_DATABASE=clickhouse.
Core entities #
| Model | Table | Role |
|---|---|---|
Corporation | corporations | Multi-tenant root; Pennant scope |
Site | sites | Facility; engine_connected for rev-mgmt |
User | users | Staff users; Spatie roles; Sanctum tokens |
Tenant | tenants | End-customer tenant records (imported) |
Ledger | ledgers | Financial ledger snapshots |
Kpi / Metric | kpis, metrics | Dashboard KPI definitions and values |
Dashboard | dashboards | User dashboard layouts |
Tenant Journey #
| Model | Role |
|---|---|
Campaign, Experiment, variants, assignments | A/B tests and journey campaigns |
RapidstorConfig | RapidStor journey configuration per corp |
Language | Enabled locale codes for translation overrides (languages table) |
TranslationKey | Catalog of translatable keys with namespace + description |
Translation | Scoped override values (scope_type: language | corporation | location) |
ApplicationInterest | "Coming soon" interest tracking (Admin Stats) |
Revenue Management mirror #
Migration 2026_05_09_000001_mirror_rev_mgmt_tables.php mirrors engine state:
rev_mgmt_facility_settingsrev_mgmt_unit_type_families— includes discriminator columnstype_name,sitelink_unit_type_id,floor,features(migration2026_07_06_000001_add_unit_type_family_discriminator, mirrors engine 0023)rev_mgmt_unit_type_unit_maprev_mgmt_audit_log— operator events use structured JWT actor (actor_kind/actor_id);decided_byrenders canonical user-id form
AI & chat #
| Model | Role |
|---|---|
ChatConversation, ChatMessage | Assistant + widget conversations |
WidgetEmbedToken | Public widget authentication |
CorporationAiGateway, AiUsageEvent, credit ledger | AI billing and usage |
AgentPromptVersion, EvalRun | Managed agents evals |
Feature flags #
Laravel Pennant stores per-scope flag state in features table. Application flags derive from Applications enum; global flags from FeatureFlag enum (helpdesk, rev_mgmt_advanced_rules, etc.).
Separate entitlement signal: revenue_management_entitled (per-corp bool, default false) — governs RM provisioning independently of the revenue_management visibility flag. Backfilled once for corps with explicit ENABLED per-corp override (migration 2026_07_08_000001_backfill_rm_entitlement).