Play, not the hook.
Gamification borrowed the look of play and the mechanics of the casino. Khelo keeps the first and refuses the second. These rules live in the docs, not in a gate: they are commitments a team makes, checked by people in review.
Six rules
What Khelo promises
Play is invited, never pulled.
Nothing animates on its own, nothing nudges, nothing says “come back”. Delight is something a person causes, by touching.
The reward is the thing itself.
No points, streaks, levels, badges, ranks or mystery boxes. If the activity is not worth doing without a score, a score will not fix it.
Things end.
Finite sets with the total in view, a real “that’s all” and no infinite feed. Stopping is rest, never framed as loss.
Mistakes are cheap and warm.
Undo is always there. No red, no shake, no buzzer. A wrong answer is something to look at, not a punishment.
Motion answers a touch.
Like a lattu, it moves only when you set it going. A press squishes for a tenth of a second and settles. Every easing ends at rest; nothing bounces; reduced motion removes it all.
Color is celebration, not alarm.
Truck-art saturation lives on large, still surfaces. The ink you read stays calm and passes AA everywhere.
Refused
Ten mechanics Khelo will not draw
Each is a known compulsion pattern. None of them has a component, a token or an icon in this system, and that is on purpose: if you need one, you are designing something other than play.
Streaks
Why not: Turns a habit into a debt you pay daily, under threat of loss.
Instead: Show what was made, not how many days in a row.
Points, XP, levels
Why not: Swaps the joy of the thing for a number that only goes up.
Instead: Let the thing itself be the reward: the drawing, the song, the solved puzzle.
Leaderboards and ranks
Why not: Makes play into a comparison someone has to lose.
Instead: Play together. Show a group’s shared creation, not each person’s place in it.
Mystery boxes and spins
Why not: Variable rewards are the slot-machine mechanism, the strongest hook there is.
Instead: Make outcomes predictable. Surprise belongs in the content, never in the payout.
Lives, energy, hearts
Why not: Rations play to make waiting hurt, then sells the cure.
Instead: Let people play as long as they like, and make stopping easy.
Countdown timers and FOMO
Why not: Artificial scarcity creates urgency that was never real.
Instead: Nothing expires to make you hurry. If there is a time limit, it belongs to the game and is stated up front.
Infinite feeds and autoplay-next
Why not: Removes the natural stopping point on purpose.
Instead: Finite sets with the total visible, and a real ending: .kh-end.
Push nudges and red badges
Why not: Reaches into someone’s day to pull them back.
Instead: Nothing appears unasked. News waits behind a control the person presses.
Confetti on open, celebration loops
Why not: Rewards opening the app, not doing anything.
Instead: Delight follows a person’s own action, briefly, then settles.
Loss framing and guilt copy
Why not: “Don’t lose your progress!” “Your owl is sad.”
Instead: Say goodbye kindly. Progress is kept, not hostage.
The test
Would they be glad they stopped?
Ahimsa asks: did the person cause this, here, now? Khelo adds a second question for every play loop: when someone puts this down, are they glad they played, and glad they stopped? If the honest answer to the second half is no, the design is pulling.
From Ahimsa
Laws carried over unchanged
- No red. There is no danger token. A thing that needs a look is warm saffron and dashed, never alarm.
- Nothing appears unasked: no modal on load, no
role="alert", no autoplay, nosetInterval. The attention gate runs here too. - Components read semantic tokens only, so markup moves between Mela and Raat untouched.
- Corners stay rounded. Every easing ends at 1.0.
- Nothing is loaded over a network. The offline gate runs here too.
- No pure black, no pure white.