All updates

Rolling custom field values, and a new colour picker

Numeric custom fields keep a daily history and roll it into a 90-day total, boosters can target one earning source, and a new colour picker lands everywhere.

01 ·Daily values and rolling windows on numeric custom fields

A numeric custom field can be configured to keep a daily history. With daily tracking on, each day closes into one value per member for that field, built from that day's recorded updates. The calculation respects whether each update was an overwrite, an addition or a subtraction. The day boundary follows a timezone you set on the field, so a partner reporting on its own trading day lands on the right date. On top of that history you can configure a rolling window, currently the last 90 days, and name a destination custom field to hold the total. The destination behaves as any other numeric custom field, so tier and milestone conditions read it directly. Re-running a day produces the same value rather than a second record, and days with no data count as zero in the sum.

One closed value per member, per day
Built from the day's updates, on the timezone set for the field
Older
Rolling window · last 90 days
Destination custom field
Reads like any numeric field in tier and milestone conditions
sum of the window
Illustration · daily values closing into one record, and a 90-day window summing into a destination field
Why it matters

A broker's tier ladder usually rests on traded volume over a period, and the source system almost never sends that rolling figure, only the day's number. Closing each day into one value and summing the window inside the platform gives the VIP tier ladder a 90-day total to read, and the broker never has to calculate or send it. The same setup works for any numeric field a partner feeds in.

02 ·Boosters that count only the earnings you choose

A booster's setup panel gained a Target action sources section with two options, Snowflake and Bulk Update, sitting between the earning limit and the booster settings. Leave both unticked and the booster counts a member's earnings across the interval as it always has. Tick one or both and only coins and XP that arrived through those sources qualify a member and feed that interval's payout. The setting lives on the individual booster, so two boosters in the same community can point at different sources, and existing boosters carry on unchanged with nothing selected.

Target action sources
Snowflake
Bulk Update
Nothing ticked counts every earning in the interval
Earnings in the interval
Coins from a Snowflake syncboosted
Coins from a bulk awardnormal rate
XP from a daily missionnormal rate
Coins from a questnormal rate
Illustration · which earnings a booster counts once a source is selected
Why it matters

A booster is the campaign lever a broker reaches for when one week needs to matter more than the others. Aiming it at coins that arrived through a partner data sync, or through a bulk award, makes that campaign specific: double the value of one week's synced trading activity, and leave every other action in the community at its normal rate.

03 ·Read APIs for daily and rolling custom field values

Custom field values gained two read-only endpoints, both behind token validation and scoped to the requesting community. One returns a member's daily values for a given date. The other returns a member's running totals across the field's configured rolling window. Both answer in a consistent shape a dashboard, profile screen or partner system can consume without reshaping it, and both respect the field's enabled state and timezone. Alongside them, a background listener picks up a configuration change to a custom calculation field as an admin saves it, so the next snapshot uses the new window, timezone or enabled state. The snapshot scheduler still runs every fifteen minutes to cover half-hour and quarter-hour timezone offsets, and checks whether a local day has closed within the last interval before it queues work, logging both what it enqueued and what it skipped.

Why it matters

Once a rolling number decides a trader's tier, everything downstream wants to read it: a profile screen, an internal dashboard, a broker's own BI stack. Serving daily and rolling values through the loyalty API gives those surfaces one permissioned way in. And because the listener picks up a configuration change as an admin saves it, shortening a window shows up on the next snapshot.

04 ·One colour picker across the platform

The colour picker built for the Customise Appearance page is now the picker used everywhere else: appearance settings, widgets, forums, milestones, roles, rich text controls, quests, referrals, email templates, authentication templates, status and category colours, and CTA settings. The solid picker carries a saturation area, hue and alpha sliders, HEX and RGB inputs and preset swatches, with invalid entries reverting to the last valid value. Where gradients apply, the same control switches into gradient mode with three stops you can drag along the bar, linear or radial output, and an angle input for linear gradients. Saved values survive the switch, including eight-digit HEX, RGBA and existing CSS gradients, and transparency stays available through the alpha control. Light and dark themes both work, and a feature section that is switched off will not open its picker.

Why it matters

Brokers white-label this programme down to the last control, and picking a colour is somewhere an admin spends real time. One picker across every settings surface means a broker setting a brand gradient on a widget gets the same stops, the same alpha and the same output it gets on the appearance page, which is what lets the embedded programme read as the broker's own product.

Also in this build
Improvement

Milestone rewards and stage icons on the member-facing milestone view render without their background cards, with more space between the icon and the title.

4 Aug
Under the hood

Widget scripts and styles go out precompressed where the browser accepts it, on a revalidation policy suited to stable filenames, and preload entries now match what the widget goes on to load.

4 Aug