> ## Documentation Index
> Fetch the complete documentation index at: https://docs.nudj.cx/llms.txt
> Use this file to discover all available pages before exploring further.

# Straight to the win

> Released September 15, 2026

## 🔴 Release v2.535.18

⭐⭐⭐ Complex • 49 commits • 1,003 files • +27,808 / -103,500 lines

<Note>
  Campaign teams can now send members straight to a widget section or a specific challenge, reward, achievement, or game. Members get a more rewarding claim moment, a launcher badge that includes unread notifications, smoother game detail pages, and their community's own points name everywhere. Admins get clearer period data, dependable community selection, and a preview experience that matches the phone.
</Note>

This release shortens the distance between a campaign message and the action you want a member to take. An email, button, or game screen can open the exact place in the embedded widget, even when the member needs to sign in first. The widget checks that the requested content belongs in that community and retries temporary lookups so members land in the right place.

Achievement claims now feel like a payoff. Members see a larger badge, a count-up for the points they earned, confetti, and a short completion animation. The launcher badge also counts unread inbox notifications, so members have one clear signal when something new is waiting. Points are now labelled with the name your community configured, right across the member experience and in every supported language.

Campaign teams get more dependable previews, community switching, and colour review. Leaderboard exclusions files now carry the period they belong to, and the points expiry card states clearly when your organisation manages points centrally. Game detail pages use the smoother, image-matched layout by default. Security and access-control hardening.

## What's new

* Open a widget section or a specific member item from a campaign button or link
* Turn achievement claims into a clear celebration with animated points and confetti
* Show claimable achievements and unread notifications in one launcher badge
* Keep member-facing wording in your community's own points name
* Show leaderboard exclusions files dated to the period they came from

## For platform administrators

* **Public widget navigation** – Send members to a specific widget section or item from a campaign CTA, including challenges, rewards, achievements, and games.
  * Check: the campaign links or buttons that open your embedded widget
* **Current leaderboard distribution view** – Open a leaderboard's distribution page on the current period and load the selected leaderboard directly.
* **Reliable community switching** – Move between communities without an old selection being restored after a refresh or navigation.
* **Aligned preview panes** – Keep the phone preview positioned consistently across Brand Kit and other admin preview panels.
  * Check: the previews you use for mobile widget and theme review
* **Visible accessibility review** – Bring colour accessibility findings into view when a theme has contrast issues, with a responsive colour layout for narrower editors.
  * Check: light and dark theme colour editing when a contrast warning appears
* **Transparent AI artwork** – Generate PNG artwork with a real transparent background on supported ChatGPT ImageGen models, avoiding a second background-removal pass that can soften edges.
  * Check: a badge or achievement image generated through Ask Nudj
* **Dated leaderboard exclusions file** – Download a period's exclusion template with the period's first and last day already filled in, so an exclusion applies to that period only.
  * Check: an exclusions template downloaded from a leaderboard period
* **Clearer points expiry settings** – Points expiry shows the switch as unavailable while the organisation's points settings are being checked, and warns when expiry set at community level will not be applied.
* **Clean create-community drafts** – A saved draft no longer reappears in the form after you create the community or clear the draft.

## For community members

* **Celebration claim modal** – See the achievement badge arrive at a larger size, watch the points count up, and get confetti when you claim.
* **Unified launcher badge** – See a single count for claimable achievements and unread inbox notifications, including after closing the widget.
* **Your community's points name** – Read your community's own points name wherever points appear, including balances, claim buttons, and screen-reader labels.
  * Check: the points wording across your member pages
* **Smoother game detail pages** – Open game details in the parallax layout by default, with a colour transition that matches the artwork while it loads.
  * Check: a branded game detail page on desktop and mobile
* **Fresh XP rankings** – See pending XP included in leaderboard results after concurrent activity settles.
* **Return to the action** – When enabled for your organisation, return to the action page after following an external-link action instead of losing your place.
* **Smoother sign-in handoff** – Keep your widget session on track when simultaneous sign-in requests arrive.

## Usage examples

### Open a specific place in the widget

Use the public embed API to connect a campaign button to the right member experience. Section panels do not need an item ID; item panels do.

```js theme={null}
window.nudj("open", { panel: "streak" });
window.nudj("open", { panel: "reward", entityId: "<24-character-id>" });
window.nudj("navigate", { panel: "challenge", entityId: "<24-character-id>" });
```

If the member is signed out, Nudj keeps the approved target and opens it after sign-in. If a section is disabled for the community, the request falls back to its view when one was supplied.

### Link a campaign CTA to a member's reward

Add a button to an email, campaign page, or authenticated game screen that calls `open` with a reward ID. Members can review the reward in the Spend view without first searching through the widget.

## Apps updated

<CardGroup cols={3}>
  <Card title="User App" icon="mobile">
    ✓ Updated – widget deep links, achievement celebrations, unread launcher counts, points naming, and smoother game details
  </Card>

  <Card title="API" icon="server">
    ✓ Updated – leaderboard refreshes now adopt pending XP after a lease wait
  </Card>

  <Card title="Admin" icon="gear">
    ✓ Updated – dated exclusions files, clearer points expiry, dependable community selection, and aligned previews
  </Card>

  <Card title="MCP Server" icon="robot">
    ✓ Updated – native transparent-background handling for supported AI image models
  </Card>

  <Card title="Website" icon="globe">
    No changes
  </Card>

  <Card title="Games" icon="gamepad">
    No changes
  </Card>

  <Card title="Shopify" icon="cart">
    No changes
  </Card>
</CardGroup>

## Detailed changes

<AccordionGroup>
  <Accordion title="Widget navigation and member journeys" icon="mobile">
    * Extended the public embed API so `open` and `navigate` can target widget views, sections, or individual challenges, rewards, achievements, and games.
    * Queued the latest navigation request until the widget is ready, then replayed approved targets after sign-in when needed.
    * Kept item lookups community-scoped and aligned with the lists members can actually see, including paginated achievements and transient lookup retries.
    * Fell back to the requested view when a target section is unavailable for the community, without prompting a signed-out member to authenticate for a destination that cannot open.
    * Returned members to the action page after configured external-link actions.
    * Kept the embed launcher badge in sync with both claimable achievements and unread inbox notifications, including when the panel closes.
    * Recovered the user link flow when two simultaneous registrations arrive for the same member, and kept anonymous identities anonymous on a repeat link.
    * Security and access-control hardening.
  </Accordion>

  <Accordion title="Points naming across member surfaces" icon="tag">
    * Read the community's configured points name once and reuse it across balances, wallet statistics, reward cards, claim buttons, drawers, and screen-reader labels.
    * Fell back to the standard wording when no custom name is configured, or when the configured name is the untranslated default.
    * Added named wording variants for every supported language, including singular and plural forms.
  </Accordion>

  <Accordion title="Achievement and game experiences" icon="trophy">
    * Reworked the achievement claim modal into a shared celebration with a larger image, badge glow, animated points counter, confetti, sound support, and a short exit animation.
    * Kept admin and link previews read-only while still showing the celebration treatment.
    * Made parallax the default game detail presentation, with smoother hero sizing, image-matched transition colours, brand-colour fallbacks, and lighter overlays while artwork loads.
    * Sampled the full hero artwork for its dominant colour and started the transition from the community's brand colour, so dark artwork no longer turns the surface grey or black.
  </Accordion>

  <Accordion title="Leaderboard and admin improvements" icon="server">
    * Adopted pending XP after a leaderboard refresh waits for another refresh owner, with one additional adoption attempt when XP arrives during snapshot creation.
    * Loaded the selected leaderboard configuration directly on its distribution page and defaulted the period selector to the current period.
    * Dated a downloaded exclusions template to the period on screen, in the board's own timezone, so an uploaded exclusion stays inside that period; an open board leaves its last day blank, and clearing both dates makes a row permanent.
    * Removed stale community restoration from the admin context so the selected community remains the one the current session requested, and surfaced a community lookup failure instead of rendering without community data.
    * Kept phone previews aligned across admin preview panes and automatically revealed contrast findings when theme colours need attention.
    * Stopped the points expiry card from claiming an organisation setting was applied when the organisation's points configuration could not be read.
    * Guarded the create-community autosave against a pending save restoring a draft that was already cleared.
  </Accordion>

  <Accordion title="AI artwork and shared packages" icon="robot">
    * Sent native transparency settings to supported ChatGPT ImageGen endpoints and kept background removal for models that need it.
    * Preserved PNG output for transparent images so badge and achievement artwork keeps real alpha rather than a painted checkerboard.
    * Centralised the AI image model registry used by shared models, admin image flows, and MCP image generation, and recorded the image payloads in the MCP replay corpus.
    * Validated reward tag and campaign references as organisation IDs on both create and update.
    * Added tiered exploration achievement guidance and proof examples to the game integration documentation.
  </Accordion>

  <Accordion title="Platform maintenance" icon="check-circle">
    * Added a permanent benchmark community and repeatable seed data for testing query behaviour at large scale.
    * Limited development deployments to affected applications and added lighter local pull-request validation to shorten feedback loops.
    * Added a CommonJS entry point to the shared Redis package so the end-to-end seed runner can load it directly, without a build step or a shim.
    * Security and access-control hardening.
  </Accordion>
</AccordionGroup>

## Technical details

The widget navigation contract now carries an optional `view`, `panel`, and `entityId`. The loader queues one latest request before iframe readiness. The widget validates the target, checks community feature availability, applies the same visibility rules as its rendered lists, and preserves approved targets across sign-in. Item panels never claim, complete, or purchase anything as part of navigation.

Leaderboard reads now adopt pending XP after lease acquisition and retry adoption if XP lands between adoption and snapshot creation. The admin distribution page reads a leaderboard configuration by its ID instead of loading a page of configurations and searching locally.

Reward create and update inputs validate `tags` and `campaigns` as organisation IDs. Points naming resolves from the merged community theme through a single helper, so every member surface reads the same label. Game detail pages default to parallax, and hero colour extraction samples the whole artwork.

AI image generation now uses native alpha on supported ChatGPT ImageGen models and keeps the existing background-removal path for other models. Transparent output is mirrored as PNG. Shared model metadata keeps the admin picker and MCP tool aligned.

Internal performance work added a large benchmark community for query analysis and affected-app development deployments. Security and access-control hardening.

## Related features

* Embedded widget
* Widget deep links
* Achievement claims
* In-app notifications
* Community leaderboards
* Game detail pages
* Points and XP naming
* AI image generation
* Game integrations

## Contributors

<CardGroup cols={4}>
  <Card href="https://github.com/DerekCounihan">
    <img src="https://github.com/DerekCounihan.png" alt="DerekCounihan" style={{borderRadius: '50%', width: 48}} />

    **@DerekCounihan**

    37 commits • +24,492 / -102,593 lines • 950 files
  </Card>

  <Card href="https://github.com/dchnudj">
    <img src="https://github.com/dchnudj.png" alt="dchnudj" style={{borderRadius: '50%', width: 48}} />

    **@dchnudj**

    5 commits • +1,323 / -812 lines • 25 files
  </Card>

  <Card href="https://github.com/blankcode-alt">
    <img src="https://github.com/blankcode-alt.png" alt="blankcode-alt" style={{borderRadius: '50%', width: 48}} />

    **@blankcode-alt**

    4 commits • +1,470 / -106 lines • 45 files
  </Card>

  <Card href="https://github.com/HienH">
    <img src="https://github.com/HienH.png" alt="HienH" style={{borderRadius: '50%', width: 48}} />

    **@HienH**

    1 commit • +228 / -28 lines • 6 files
  </Card>

  <Card href="https://github.com/nudj-changelog-bot%5Bbot%5D">
    <img src="https://github.com/nudj-changelog-bot[bot].png" alt="nudj-changelog-bot[bot]" style={{borderRadius: '50%', width: 48}} />

    **@nudj-changelog-bot\[bot]**

    2 commits
  </Card>
</CardGroup>

## Release stats

| Metric        | Value             |
| ------------- | ----------------- |
| Total Commits | 49                |
| Lines Added   | +27,808           |
| Lines Removed | -103,500          |
| Files Changed | 1,003             |
| Complexity    | ⭐⭐⭐ Complex (3/5) |

***

*v2.535.18 deployed on September 15, 2026*
