← ALL PATCH NOTES

The FX layer: selling gets a particle system

v0.8.0 GameNew
  • Gamification FX across the whole app: XP ticks, level-up flashes, streak fire. Subtle enough for a sales floor, loud enough to feel it.
  • Top XP level renamed Supergrade. There is a GS-16 joke in the FAQ. If you know, you know.
  • Arena and Console merged into one surface, database intake got people lists, and a streak bug that double-counted kanban XP is dead.
THE BUILD LOG

Seven hundred and eighty-one lines of confetti, and a table that maps selling to fireworks

Closing a deal fires two effects at once. Leaving a forum comment gets the same effect as adding a task. Somebody had to decide all of that.

At 01:11 on 2026-05-17, a Sunday morning, this product acquired a particle system.

The engine is 781 lines of hand-written canvas code with no dependencies. It has fifteen effects, and their internal names are the most honest description of what this product believes about selling that exists anywhere in the codebase: an XP burst, a coin drop, a cash bag, a coin shower, a sword slash, a sword combo, small confetti, a confetti cannon, a level-up shockwave, a rank-up banner, a streak flame tick, a streak flame burst, a badge shimmer, combo lightning, and a vault pop.

There is no sound. I want to say that plainly, because "particle system" tends to imply a jingle, and every version of this story I have seen told secondhand adds one. The file contains no audio of any kind. It is light only.

The table that assigns fireworks to work

The interesting artefact is not the engine. It is a dictionary in the backend that maps things a seller does to effects that fire, and somebody had to sit down and fill it in.

Adding a prospect gets an XP burst. So does running a scrape, and acting on a signal. Adding a task gets a coin drop. Completing a task gets a sword slash followed by an XP burst, which is a small piece of narrative in two effects: the strike, then the reward.

Moving a prospect from lead to contacted gets small confetti. So does reaching qualified. Reaching proposal gets small confetti at large intensity, which is the same celebration turned up rather than a different one, and that restraint is deliberate.

Closing a won deal fires two effects simultaneously: the confetti cannon and the cash bag. Booking a meeting fires exactly the same pair.

That last one is the opinion. In most CRMs the closed-won moment is the only real celebration, because revenue is the only thing the software is measuring. Firing identical effects for a booked meeting says something specific: that getting a real conversation onto the calendar is the hard part, and the close is largely downstream of it. Anyone who has carried a quota knows this is true and almost no software behaves as though it is.

At the other end, leaving a forum comment gets a coin drop, which is the same effect as adding a task. Contributing an observation gets a coin drop at small intensity. The system has a view about the relative worth of community participation and it is roughly "worth something, worth less than closing," which is about right.

The whole file is a value system with a rendering layer attached.

Restraint is most of the engineering

The parts of the engine I respect are the parts that stop it.

There is a hard cap of three concurrent effects, with everything else queued. There is a 200 millisecond debounce on repeats of the same effect. Both exist because the failure mode of this feature is not that it fails to fire, it is that it fires forty times when somebody bulk-updates a list and the browser becomes a slideshow.

There is an intensity setting with an off position, and off does not mean the code path dies. It degrades to a plain text notification. The XP still awards. The number still moves. You simply stop seeing the fireworks. That is the correct design for a feature like this, because the people most irritated by celebration animations are frequently the highest performers, and punishing them by silently withholding their points would be an act of genuine hostility.

Reduced motion is handled with more care than most products manage. Four heavy effects are downgraded to a text banner for anyone whose operating system asks for less animation. And the sword slash, when it cannot animate, becomes the string "// TASK CRUSHED +20", which is a joke that survives the accessibility path. Someone wrote a fallback for people who cannot see the animation and made sure the fallback was still funny.

There is a helper in there that generates random strings from an alphabet of the capital letters plus hash, at, percent, dollar, ampersand and asterisk. That is a slot-machine glyph scrambler, for the moment a rank flickers before landing on the new one. Nobody needed that. It is four lines and it is the difference between a number changing and a number arriving.

The rule that lasted six days

The commit that shipped all this states its scope precisely: the effects go into the authenticated application, never marketing.

That is a sound boundary. Celebration inside the product is feedback, because the user did something. Celebration on a marketing page is a carnival barker, because the visitor did nothing except arrive.

Six days later, on 2026-05-23, a commit converted a section of the homepage into a live effects showcase, reusing the same engine, and defended itself in the body by noting that it reuses the in-app engine rather than forking it. Which is true, and is an answer to a question nobody asked. The rule was not about code duplication. It was about where celebration belongs.

I am not sure that was wrong, for what it is worth. Showing prospective users what the product feels like is a legitimate thing for a homepage to do, and this product's argument is partly emotional, so demonstrating the emotion is fair. But it is worth noticing that the rule was written down in a commit body and broken inside a week by the same person, which is roughly the half-life of a self-imposed constraint with nobody to enforce it.

The same homepage commit also deleted a gamification section that had shipped twenty-three and a half hours earlier. That is the actual tempo of this project in May: build it, look at it the next evening, replace it.

Fifteen effects, three at a time, two hundred milliseconds apart, no sound, and a dictionary that thinks booking a meeting is worth as much as closing a deal.

— DealArena Team