A month on XEX, from a rate change to a settled claim.
Six stations. Two of them will not open for one person. Here is each one, and what it writes.
Your pay plan is configuration, not code.
Rates, ranks, ladders, thresholds, pools and per-package terms are edited in structured forms and saved as a new version. Nobody writes JSON, and nobody ships a release to change a percentage.
Saving does not make a rate live. A version is stamped with the engine version that will execute it and sits in draft until a second operator approves it. Self-approval is refused twice — once in Go and once in the database — so it cannot be worked around by calling the API directly, and it cannot be worked around by an operator who holds every role.
Because the engine version is recorded on the version, a change in how the platform computes is a new engine version rather than a silent change in what your plan paid last month. A tenant can be pinned to an engine or migrated deliberately.
internal/program · migrations · POST /v1/admin/programs/{version}/approve
Members pay on your accounts, not ours.
A package is priced and sold by you. The money arrives in an account you own, and the platform is told that it did.
Host handoff
rails.host_handoff
On-chain transfer
rails.onchain_transfer
Bank transfer
rails.bank_transfer
Alipay
rails.alipay
WeChat Pay
rails.wechat_pay
M-PESA
rails.mpesa
Every one of these is configured with your credentials, on your accounts. The rail configuration refuses to store a credential that matches the platform's own — the check exists precisely because “we'll just use ours for now” is how a software vendor accidentally becomes a payment institution.
internal/rails
Six engines, one ledger.
Each engine writes its own lines, each line carries the rule identifier that produced it, and all of them post into a single append-only ledger.
Direct referral
internal/direct
Team differential
internal/team
Same-rank override
internal/samerank
Ranks
internal/rank
World pool
internal/pool
Clubs and accommodations
internal/club · internal/accommodations
No rate is hardcoded in engine code — the configuration is the only source the engines read. Every engine is driven by golden fixtures, and the Go suite runs against them on each change, which is the only way a comp engine stays honest once it has real money behind it.
The run is a dry run first.
A period is computed into draft lines that pay nobody. You read what it would do, and then somebody else approves it.
The console shows the draft's total compensation against the period's refund-net cash sales. If that ratio is over your configured ceiling, the run cannot be approved at all — the check is fail-closed and lives in the approval path, not in a report somebody reads afterwards.
Approval must come from an operator other than the one who created the run. Posting is resumable: a run interrupted halfway is finished by running it again rather than by somebody reconciling two half-posted periods by hand. A draft you do not want is discarded, and discarding is idempotent too.
internal/runs · /admin/runs
The member claims. You settle.
A claim reserves exact ledger lines and emits an instruction. The platform never holds the money it is instructing you to move.
Exact lines, reserved
internal/claims
Cancel loses to settlement
internal/claims
No settlement host? A console.
internal/httpapi/payouts.go
What a member sees.
Your members read the portal far more often than you read the console, and what it says is what your programme sounds like.
Thirteen portal screens in ten languages, including right-to-left. Balances, team, earnings by type, packages, claims, disputes and the plan itself, all rendered from the same configuration the engines execute — so a member reads the same words before joining and after.
Every non-ok state carries a reason and a next action. “Geo-restricted” on its own is a dead end; the notice says why and what to do. A member who disagrees with a figure opens a dispute that moves from open to investigating to resolved or rejected, with its audit trail attached — which is a far better outcome for you than the same member arguing with their sponsor in a group chat.
app/[locale]/portal · internal/disputes · i18n
See what it costs, or take a sandbox.
The sandbox is free on every plan, and it is the whole product — not a demo with the interesting parts removed.