Gamfony
Send what players do. Gamfony decides what they earn.
- Rules engine
- Currencies
- Achievements
- Ranks and levels
- Dry run
- Audit trail
- Scoped API keys
- One instance per customer

Demo instance, with an invented studio, players and numbers.
Why it matters
Rewards code scattered through an app fires twice and can't explain itself.
In-house rewards logic tends to end up scattered through application code, and it breaks in the usual ways. An award fires twice when a request is retried, two requests race, and nobody can say why a player has the balance they have. Changing a reward, like a badge after ten hard levels, usually means a code change and a deploy.
Gamfony moves all of it into one engine. Your application reports what players do, rules decide the rewards, and the people who run your product, community or live-ops can change those rules in the admin console. Every change to a player is applied once and recorded with its cause.
Your server talks to Gamfony over a plain HTTPS and JSON API, and players are created the first time they show up, so there is no user database to sync. Each customer gets their own dedicated instance, hosted for them.
Built and tested, not yet released: leaderboards, signed webhooks, a public API reference and import from another system.
- 01
Rules without code
Combine conditions with AND and OR, such as how often an event happened today, this week or ever, filtered by the event's own data, plus balances, badges held and levels reached.
- 02
Currencies, badges and levels
Coins, gems or XP with a floor no penalty can go below, badges that can be earned more than once, and ranks that follow XP, with level ladders generated for you.
- 03
Safe to retry
Every event carries your own id. Send it again and you get the original answer back, never a second award. Each event is stored all or nothing.
- 04
Exactly what changed
Wait for the answer and get back only what was applied, so your app can show "+10 gold, new badge!" straight away. Or send it and move on.
- 05
Dry run on the real engine
Send a test event and see which rules would fire, which wouldn't and why, and what the player would get. Nothing is saved.
- 06
Audited, both ways
Rules grant and deduct. Admins can revoke, adjust and move ranks, each with a written reason. Every change lands in one ledger with its cause.
- 07
A console for the whole team
A dashboard, a rule builder that reads rules back as sentences, player pages and a live activity log, in light and dark, fully usable from the keyboard.
- 08
Closed by default
Passwordless, invite-only admin sign-in with three roles, and scoped API keys that expire, rotate without downtime and are stored hashed.
- 09
Your own instance
One dedicated engine, console and database per customer, hosted for you. Customer data is never mixed in a shared database.
Platforms and SDKs
Any server language. SDKs ready, connectors on the way.
Gamfony's API is plain HTTPS and JSON, so you can integrate from any server language, with ready SDKs for PHP, Node.js and Python. Framework packages and connectors for popular platforms are in development.
- Available now
REST API
Any server-side language that can make HTTP requests can integrate today, without an SDK.
- HTTPS and JSONany server language
- Ready
Official SDKs
Send events, read players and rewards, and retry safely without double-sending, from your own server.
- PHP8.1+
- Node.js20+, TS and JS
- Python3.10+, sync and asyncio
- In development
Framework packages
Thin add-ons on the SDKs: configuration, a background send-later helper and a webhook receiver.
- NestJS, Express, Next.jsNode.js, server-side
- LaravelPHP
- Django, FastAPIPython
- In development
Platform connectors
Ready-made connectors for the platforms communities, courses and shops already run on.
- WordPresswith BuddyBoss and BuddyPress
- LearnDash, Tutor LMS, LearnPress, LifterLMSlearning
- Moodlelearning
- WooCommerceearn, refund, redeem
- n8n, Uncanny Automatorautomation
- Discourse, Discordcommunity
Under the hood
Built so a retry never pays out twice.
Each event is one database transaction under your own event id. Rules run against a consistent snapshot of the player, and every route has to declare who may call it, or the server won't start.
- RulesRule order doesn't matterRules are evaluated in passes against one snapshot of the player. Chain reactions resolve within the same event, and they are bounded so they can't loop forever.
- EventsOne transaction eachA retry returns the stored answer, and every error says whether to try again.
- PlayersIn order, in parallelEach player's events are applied one after another, while different players are processed in parallel.
- EditorPreviews match the engineThe console and the engine share the same test cases for event filters and level curves, so what the rule editor previews is what the engine does.






