StackTrading Docs

SRS: UC_4.16.1 — Level-Up Cinematic & Certificate (LIVE)

UC_4.16.1: Level-Up Cinematic & Certificate (LIVE)

FieldValue
BA in ChargeAnh Hoang
Date Created2026-08-26
Versionv1.2
Document ReferencesUser journey - Certificate and Left Box.docx · Level Up Cinematic Scene Handling.pdf · RFQ_ Website and Dashboard Implementation V7.pdf (§Part C — Career & HR Widget, Viral Moment, Level-Up Cinematic Sequence & Sharing) · RFQ_ Stack Trading Prop Tech V7.pdf (§WebSocket LEVEL_PROMOTION, §Endpoint Certificate, §Endpoint HR Integration, §Endpoint Current Level Detail) · Zapier Integration V7.pdf (§Flow 4, §Flow 3H, §Table A / Table B) · QnA from clients — STAGE 2 Settings + Career + Viral ([LUC-BIZ-02], [LUC-UI-01][LUC-UI-08], [HR-DEF-01], [CTRL-DEF-01], [CTRL-EP-02])

Document References

#Original DocumentKey Sections Used
1User journey - Certificate and Left Box.docx§Certificate Buttons (label change Share MilestoneShare Level Up Video; the 2-row button set for the HR & Career screen) · §Level Up — How Sharing Works (1. JSON State Capture · 2. Fixed Aspect Ratio Read-Only Clone · 3. Pre-Liquid Animation Phase · 4. WebM Video Transition · 5. Certificate Construction · 6. Illusion) · §Redacted or Unredacted Sharing (2. Dashboard Toggle State · 3. Server-Side Data Scrubbing · 4. Client-Side Rendering · 5. Open Graph Image Generation) · §Certificate Trigger and Animation Requirements (Motion 1 / Motion 2) · §Certificate Dynamic Text Mapping (8-row Trigger Event → Title / Amount / Subtitle table)
2Level Up Cinematic Scene Handling.pdf§1 Client-Side Rendering (Background/Effects Layer, Signature/Vector Assets, Dynamic Data Layer, QR Code, Audio Orchestration & Autoplay) · §2 Sharing & Open Graph Routing (public route, OG injection) · §3 Dashboard UI & Interaction Logic (social icons, Copy Link + toast, Download Certificate)
3RFQ_ Website and Dashboard Implementation V7.pdf§Part C — "Career & HR Widget: Displaying Vacation Days, Next Pay Date, and Latest Certificate (Data from Rippling)" · §Viral Moment — "Full-screen celebration animations must include a Replay animation and Share button. The Certificate modal must feature a Redacted version toggle to hide Personally Identifiable Information before sharing, direct 1-click share buttons for X, LinkedIn, Facebook, Reddit, a Download option, and render a dynamic QR code utilizing the polygon_tx_hash."
4RFQ_ Stack Trading Prop Tech V7.pdf§WebSocket LEVEL_PROMOTION"Trigger Celebration: Immediately plays the Level Up animation… and unlocks the next level on the Bento Grid", payload {event, old_level, new_level, timestamp} · §Endpoint Certificate (GET, input user_id, output {url, polygon_tx_hash, promotion_date, bonus_awarded, capital_allocation}) · §Endpoint HR Integration ({vacation_days, next_pay_date, base_salary_annualized, benefits_estimate, compensation_track}) · §Endpoint Current Level Detail (Level, Title, Notional)
5Zapier Integration V7.pdf§Flow 4 — Retention, Promotion & "Delta" Funding (Step 9 Immutable Ledger → on-chain receipt, Step 10 DB Update Current_Level, Step 13 Data Fee Refund L3 Futures, Step 15 Klaviyo emit of the Level-Up URL) · §Flow 3H — Go Live (first SIM → LIVE promotion) · §Table A (Forex — Max_Forex_Notional) / §Table B (Futures — E-Mini contract equivalents, Bonus_Paid_To_Trader, Base_Income, Base_Income_Flex)
6QnA from clients — STAGE 2: Level-Up & Certificate, Settings, Career & HR[LUC-BIZ-02] (2026-08-24 — JSON State Capture, read-only clone, consecutive level-ups) · [LUC-UI-01] (all four share links share the video) · [LUC-UI-02] (redacted toggle on the video share — 🟡 not a firm commitment) · [LUC-UI-03] (single fixed download format, JPEG) · [LUC-UI-04] (LEVEL_PROMOTION → force-redirect to the Command tab first) · [HR-DEF-01] (the Career panel is a read-only mirror of Rippling) · [CTRL-DEF-01] + [CTRL-EP-02] (Reduce Motion scope; FE-only, localStorage, per device) · [LUC-UI-07] (2026-09-03 — [Replay] on the Career tab plays in place as a full-screen overlay; no route change to the Command tab) · [LUC-UI-08] (2026-09-03 — the Open Graph unfurl: token-driven <meta> tags and two pre-composed 1200×630 static OG images per milestone)
7Client design pack — Level certificate modal + Career screenFive frames supplied to BA on 2026-08-26: certificate modal final state (Replay + Share) · expanded share menu (Redacted OFF) · expanded share menu (Redacted ON, name blurred) · variant "International or Level 1-5" · variant "Level 6+ US Flex Cash" · Career tab with the Latest certificate panel. ⚠️ Not yet checked into References/Wireframe/ — see §10 item 9

1. Overview

FieldContent
IDUC_4.16.1
Use CaseLevel-Up Cinematic & Certificate (LIVE)
DescriptionOwns the Certificate of Promotion as the authenticated LIVE trader experiences it on the Dashboard: how it is reached, how it animates, what it renders and what each of its controls does. There are exactly two ways to reach it (Ref: BR_4.16.1.2): (A) automatically, the moment the trader is promoted — a LEVEL_PROMOTION WebSocket event force-redirects the trader to the Command tab, the cinematic plays over a read-only clone of the dashboard as it stood at the millisecond of promotion, and it concludes with the certificate modal (Ref: BR_4.16.1.4); and (B) on demand, from the Career tab, where the Latest certificate panel renders the certificate as a still frame with a [Replay Video] control that re-plays the same sequence in place — a full-screen overlay stacked over the Career tab, with no navigation to the Command tab and no route change of any kind (Ref: [LUC-UI-07], BR_4.16.1.17). Both surfaces expose the same control set — the five share targets, the Redacted version toggle, [Download Certificate] and [Replay Video]. Scope boundary: this document covers the certificate and its motion only. Every other tile on the Career tab — Employment status, Current level, Base salary, Benefits, Vacation days, Next pay date, [Manage Payouts], [View in Rippling] — is out of scope here and owned by UC_4.16.2 (Ref: BR_4.16.1.1). The rules that decide whether a trader is promoted (profit target, Table A/B lookup, Flow 4's 16 steps) belong to STAGE 6: CAREER PATH & PROFESSIONALIZATION and are summarised in §3 only as the precondition that produces the event.
Zapier FlowNot triggered by this widget — it is a read surface. Context only: Flow 4 (Retention, Promotion & "Delta" Funding) writes the promotion, the on-chain receipt (Step 9) and Current_Level (Step 10), and is the producer of LEVEL_PROMOTION · Flow 3H (Go Live) is the producer for the very first SIM → LIVE promotion — ⚠️ Flow 3H still has no certificate/cinematic trigger step (Ref: §10 item 3)
Zapier TableTable A (Forex)Max_Forex_Notional, Bonus_Paid_To_Trader, Level Title · Table B (Futures) — E-Mini contract equivalent, Bonus_Paid_To_Trader, Base_Income, Base_Income_Flex, Level Title. Read server-side to compose the certificate payload; never read by the frontend (Ref: BR_4.16.1.10, BR_4.16.1.11)
3rd PartyPolygon PoS (via Alchemy RPC) — the on-chain promotion receipt behind polygon_tx_hash; PolygonScan is the QR code's destination (Ref: BR_4.16.1.12) · LinkedIn · X · Facebook · Reddit — native share intents opened with the public milestone URL (Ref: BR_4.16.1.14) · Rippling — owns the surrounding HR data on the same tab, not the certificate (Ref: BR_4.16.1.1)

Surfaces and states covered by this UC (client design pack, 2026-08-26):

#Surface / StateWhat the trader seesRef
1Auto-play on promotionForced redirect to the Command tab → dashboard clone freezes → gauge pulse + gold-vein grid → liquid-gold WebM wipe → certificate writes itself on§5
2Certificate modal — final stateFull certificate, [Replay animation] and [Share Level Up Video]§5 step 9
3Certificate modal — share menu expandedShare Level Up Video to: + LinkedIn · X · Facebook · Reddit · Copy Link, [Download], Redacted version toggle (OFF)§5 step 10
4Certificate modal — redacted previewSame menu with the toggle ON; the trader's name renders blurredBR_4.16.1.13
5Career tab — Latest certificate panelStill certificate + the full control row (share targets, [View], [Download], Redacted version, [Replay])§6
6Career tab — cinematic overlay[Replay] mounts the same full-screen cinematic on top of the Career tab by z-index; [Close] unmounts it and returns the trader to the Career tab exactly where they left offBR_4.16.1.2

The unauthenticated public route /milestone/[unique-id] — the page a stranger lands on after clicking a shared link, and its Tap to View Milestone gate — sits inside the same WBS item but is not covered by this document; it is a separate deliverable, not yet documented in this repo. This UC specifies what the share controls emit and, since 2026-09-03, what the link they emit unfurls to in a social feed (BR_4.16.1.18 — the <meta> contract and the two static OG images the backend must produce, both of which are generated at promotion time and are therefore a producer-side obligation of this feature, not a rendering concern of the public page). The public-route document specifies what the recipient sees after the click. All three surfaces consume the same stored payload (Ref: BR_4.16.1.4).

Note on the shared cinematic component. The overlay used by entry point B is the same standalone public share component that the public route mounts — one component, two hosts (Source: [LUC-UI-07], 2026-09-03). It builds its read-only clone from the snapshot inside itself and does not depend on which tab is rendered behind it.

2. Trigger

  • Entry point A — automatic. A LEVEL_PROMOTION WebSocket event arrives while the trader is authenticated in the Dashboard (Ref: BR_4.16.1.2).
  • Entry point A' — deferred. The trader logs in and the backend reports at least one promotion whose motion has never been played (Ref: BR_4.16.1.5).
  • Entry point B — on demand. The trader opens the Career tab from the persistent sidebar (Ref: UC_4.1.2 §2) and the Latest certificate panel mounts, or activates [Replay Video] / [View Certificate] inside it. Neither control navigates anywhere — the trader stays on the Career tab for the whole of it (Ref: [LUC-UI-07], BR_4.16.1.17).

3. Pre-conditions

  • The trader is authenticated and the account type is LIVE. A SIM trader has no certificate surface and no Career tab data — Career & HR exists only once the trader is contracted (Ref: [HR-DEF-01], BR_4.16.1.1).
  • At least one promotion has been processed. The promotion mechanics themselves are owned by STAGE 6 and are stated here only as context: the middleware detects Net_Equity >= Profit_Target for the trader's current level, emits PROFIT_TARGET_HIT, and Flow 4 performs the promotion — locking and liquidating, resetting the ledger, looking up the next level's parameters from Table A (Forex) or Table B (Futures), writing the on-chain receipt (Step 9), setting Current_Level = Next_Level (Step 10) and re-enabling trading. The first SIM → LIVE promotion runs through Flow 3H instead. Nothing in this UC re-derives, re-validates or re-calculates any of it.
  • The JSON state snapshot for that promotion exists. The backend captured it at the exact millisecond LEVEL_PROMOTION fired, straight from the execution core, whether or not the trader was logged in (Ref: [LUC-BIZ-02], BR_4.16.1.4).
  • The certificate payload is retrievable — GET /certificate returns {url, polygon_tx_hash, promotion_date, bonus_awarded, capital_allocation}, and Current Level Detail supplies Level and Title. polygon_tx_hash may be null at this point (Ref: BR_4.16.1.12).

4. Post-conditions

  • The certificate for the trader's newest level has been displayed at least once, and its motion is marked as played so it does not replay on the next login (Ref: BR_4.16.1.5).
  • After the auto-play path closes, the Dashboard has re-fetched and is showing live data again, not the snapshot (Ref: BR_4.16.1.4).
  • Any share URL the trader emitted points at the token matching the Redacted version toggle state at the moment of the click (Ref: BR_4.16.1.13).

5. Basic Flow — Entry Point A: automatic play on promotion

  1. Flow 4 (or Flow 3H for the first SIM → LIVE promotion) completes the promotion and the backend emits LEVEL_PROMOTION {event: "PROMOTION", old_level, new_level, timestamp} over the WebSocket channel. In the same operation the backend stores the JSON state snapshot and mints the on-chain receipt (Ref: BR_4.16.1.4, BR_4.16.1.12).
  2. The frontend receives the event and immediately force-redirects the trader to the Command tab, whatever tab they were on. The sequence always starts from the Command tab interface (Ref: [LUC-UI-04], BR_4.16.1.2). This redirect belongs to this entry point only — the manual replay of §6 never navigates (Ref: [LUC-UI-07]). ⏳ Whether the client still wants it here at all, given the overlay is self-contained, is §10 item 15.
  3. The frontend fetches the stored snapshot and mounts a read-only clone of the Command tab from it. From this instant the trader is no longer looking at live data — every figure on screen is the figure they hit to pass (Ref: BR_4.16.1.4).
  4. [If the milestone is an Associate Track pass, Level 1 or Level 2]Motion (1) runs: steps 5 and 6 are skipped and the sequence goes straight to step 7 — the certificate writes itself onto the screen with its stamp (Ref: BR_4.16.1.3).
  5. [If the milestone is Level 3 or higher]Motion (2), pre-liquid phase: the PnL gauge node pulses (opacity/brightness) and an SVG overlay traces a gold stroke along the Bento Grid gaps until the layout intersections are lit (Ref: BR_4.16.1.6).
  6. The alpha-channel WebM / HEVC liquid-gold layer plays over the clone. The clone stays visible through the transparent channel until the gold covers the screen completely (Ref: BR_4.16.1.6). The cinematic audio track starts synchronously with this playback (Ref: BR_4.16.1.7).
  7. On the revealed certificate background, the top layer writes itself: the Lottie frame and handwritten signature stroke, then the trader's data injected into the DOM with a staggered Framer Motion reveal, then the dynamically generated QR code (Ref: BR_4.16.1.6, BR_4.16.1.9, BR_4.16.1.12). Writing/stamping SFX are tied to the reveal events, so their duration matches the actual length of this trader's name (Ref: BR_4.16.1.7).
  8. The left box of the certificate resolves its Title / Amount / Subtitle from the trader's milestone, asset class and compensation track; the right box resolves the capital allocation of the level being entered (Ref: BR_4.16.1.10, BR_4.16.1.11).
  9. The sequence ends on the certificate modal in its final state: the full certificate plus [Replay animation] and [Share Level Up Video] (Ref: §9.1).
  10. [If the trader activates [Share Level Up Video]] → the button row is replaced by the expanded share menu: Share Level Up Video to: followed by LinkedIn, X, Facebook, Reddit and Copy Link, then [Download], with the Redacted version toggle below (Ref: BR_4.16.1.14, BR_4.16.1.13).
  11. [If the trader activates [Replay animation]] → the sequence restarts from step 3 against the same snapshot. No new request is made and no state is written.
  12. [If the trader closes the modal] (the ✕ control) → the modal and the read-only clone are both unmounted, the frontend re-fetches the live dashboard, and the Command tab returns to the current state. The motion is marked played (Ref: BR_4.16.1.4, BR_4.16.1.5).

6. Alternative Flow — Entry Point B: the Latest certificate panel on the Career tab

  1. The trader selects Career in the persistent sidebar (Ref: UC_4.1.2 §2).

  2. The Latest certificate panel calls GET /certificate and renders the certificate as a still frame — the final state of the sequence, with no motion, no audio and no dashboard clone behind it (Ref: BR_4.16.1.2).

  3. The panel renders the control set in two rows (Ref: BR_4.16.1.17, §9.2):

    • Row 1 — Share Level Up Video label followed by the five share targets, already expanded (no second click needed on this surface).
    • Row 2 — [View Certificate], the Redacted version toggle, [Download Certificate], [Replay Video].
  4. [If the trader activates [Replay Video]] → the cinematic plays on the Career tab itself, in four steps and with no navigation at any point (Source: [LUC-UI-07], Adrian Stack, 2026-09-03 — "there is absolutely no reason to force a background route change to the Command tab first"):

    1. Trigger — the trader activates [Replay Video] while on the Career tab.
    2. Mount — the full-screen cinematic overlay mounts directly on top of the current UI by z-index, obscuring the dashboard entirely. The read-only clone is built from the stored snapshot inside the overlay; the Career tab underneath is left mounted and untouched.
    3. Playback — the WebM video, the audio and the Lottie certificate sequence execute — i.e. §5 steps 3 → 9 against the stored snapshot.
    4. Dismissal — the trader activates [Close]; the overlay unmounts and the trader is returned seamlessly to the Career tab exactly where they left off — same scroll position, same panel state, no re-fetch of the tab.

    It does not re-fire any backend event, does not change the played flag, and does not trigger a React Router transition.

  5. [If the trader activates [View Certificate]] → the certificate modal opens directly at its final state, without motion or audio.

  6. [If Reduce Motion is enabled on this device][Replay Video] is not rendered at all, and the panel is reachable only through step 5's still/modal path (Ref: BR_4.16.1.8).

  7. Share, Copy Link, Redacted version and Download behave identically to the modal — the same rules, the same URLs, the same export (Ref: BR_4.16.1.13BR_4.16.1.16).

7. Exceptional Flow

  • polygon_tx_hash is null — the mint is still in the background retry queue. The certificate is issued and displayed immediately regardless; Flow 4 does not halt. The QR block renders its pending state and the hash line carries no destination until the network recovers and the hash is written (Ref: BR_4.16.1.12).
  • GET /certificate fails (network / 5xx / timeout) — the Latest certificate panel renders its error state and the toast Ref: TE-SYS-01 is displayed. The rest of the Career tab is unaffected; nothing on this panel is retried automatically.
  • The session expires while the panel is mounted (HTTP 401) — toast Ref: TE-AUTH-01, then redirect to the Auth0 login.
  • The WebSocket drops during the sequence — the sequence is not interrupted. It is rendering from a snapshot already held in the client, so it runs to completion without the socket. Reconnection follows Ref: CR-14.
  • The browser blocks audio autoplay on the authenticated surface — the sequence still plays; only the audio is suppressed until a user gesture occurs. See §10 item 4, which asks the client whether the authenticated path needs its own interaction gate.
  • The clipboard write is refused by the browser (permission denied / insecure context) — no URL is copied and the success toast is not shown (Ref: BR_4.16.1.15).
  • A second LEVEL_PROMOTION arrives while a sequence is playing — the running sequence is not interrupted; the newer promotion is queued and handled by the "latest only" rule at the next opportunity (Ref: BR_4.16.1.5).

8. Business Rules

BR_4.16.1.1: This UC Owns the Certificate Only — and Only for LIVE

The Career & HR widget carries several tiles. Only the certificate is specified here. Employment status, Current level, Base salary, Benefits, Vacation days, Next pay date, [Manage Payouts] and [View in Rippling] are owned by UC_4.16.2 — a read-only mirror of Rippling — the dashboard renders whatever value Rippling returns and deep-links out for any action, with no PTO logging, no accrual calculation and no write path on our side (Source: [HR-DEF-01], Adrian Stack, 2026-08-15 — "This is managed in Rippling, do not worry about it. You are just reading in the current value in this screen."). Those tiles are named here only so the panel's neighbours are unambiguous.

The certificate surface is LIVE-only. A SIM/Evaluation trader has no Rippling record and no Career tab; the SIM celebration path is a different scope. Note however that the first certificate a LIVE trader ever holds is the Associate Track Cleared one, issued at the SIM → LIVE promotion (Ref: BR_4.16.1.10).

BR_4.16.1.2: Two Entry Points, One Component — and Exactly Where Motion Plays

#Entry pointMotionAudioRead-only cloneRoute changeWhere the trader lands on close
ALEVEL_PROMOTION fires while authenticated✅ full sequence✅ mounted as the Command tabforced redirect to CommandCommand tab, live data re-fetched
A'Pending motion found at login✅ full sequence✅ mounted as the Command tabforced redirect to CommandCommand tab, live data re-fetched
B1Career tab → panel mounts❌ still framen/a — the panel itself
B2Career tab → [Replay Video]✅ full sequence✅ rendered inside the overlaynoneThe Career tab, exactly where they left off
B3Career tab → [View Certificate]The Career tab

Entry point A navigates. Entry point B does not. On A the frontend must first redirect the trader to the Command tab, regardless of which tab they were on when the event arrived; the animation always starts from the Command tab interface (Source: [LUC-UI-04], Adrian Stack — Figma comment). The trader is never asked to navigate there themselves, and the sequence never starts on top of the Journal, Performance, Community or Settings screen.

On B2 the opposite rule applies, and it is explicit: the cinematic plays directly on the Career tab and must not route to the Command tab first (Source: [LUC-UI-07], Adrian Stack, 2026-09-03 — "Your intuition is exactly right. Please play it directly on the Career tab… This prevents unnecessary React router navigation and creates a much faster, smoother experience."). The overlay is a full-screen z-index layer over whatever is currently rendered, it obscures the dashboard entirely, and on [Close] it unmounts and hands the trader back to the Career tab unchanged. Nothing behind the overlay is unmounted, re-mounted or re-fetched.

There is one cinematic component — and it is the same standalone public share component the public /milestone/[unique-id] route mounts (Source: [LUC-UI-07]). Entry points A, A' and B2 mount it identically; because it builds its own read-only clone from the snapshot, it is indifferent to what is rendered behind it, which is precisely why B2 needs no route change. The three differ only in what caused the mount and in where the trader is returned to.

⏳ These two rulings share one component but point opposite ways on routing. If the overlay is genuinely self-contained, the forced redirect on A has no more justification than the one the client just removed from B — and the [LUC-UI-06] DND-state registry (built to survive that redirect) would lose most of its purpose. Raised with the client as §10 item 15; written here as A still redirects, per the standing [LUC-UI-04] ruling.

BR_4.16.1.3: Two Motion Tiers, Decided by the Milestone

Milestone passedMotionWhat runs
Any Associate Track pass, Level 1, Level 2Motion (1)The certificate writing itself onto the screen, with the stamp. No dashboard-melt cinematic.
Level 3 or higherMotion (2)The full cinematic Level-Up — gauge pulse, gold-vein grid, liquid-gold wipe — followed by the certificate writing itself.

(Source: User journey - Certificate and Left Box.docx §Certificate Trigger and Animation Requirements.) The tier is decided by the level passed, not the level entered. The certificate content itself is identical in both tiers — only the lead-in differs.

BR_4.16.1.4: The Cinematic Never Renders Over Live Data

The backend generates and stores a complete JSON state payload at the exact millisecond LEVEL_PROMOTION fires, captured straight from the execution core, whether or not the trader is logged in (Source: [LUC-BIZ-02], 2026-08-24). It is not an image snapshot.

The payload must carry everything needed to mount the read-only clone (Source: User journey - Certificate and Left Box.docx §1 JSON State Capture):

ModuleCaptured values
Header metricsDays remaining · market status · daily loss limit current vs maximum · market-close countdown
PnL GaugeCurrent PnL · target PnL · daily stop limit · text overlay variables (promotion level, estimated bonus)
Position MonitorThe complete array of session positions (Symbol, Side, Net Position, Unrealized PNL, Realized PNL, Total PNL, Estimated Swap) and the aggregate totals row
The PulseCurrent score + the historical array behind the sparkline
Equity CurveThe time-series array mapped to the intraday plot
Profit Factor & Win RateGross Profit · Gross Loss · Profit Factor ratio · Total Trades · Win rate % · Average win/loss · the sequential array of the last 100 trades for the dot matrix
The Desk ManagerThe array of the most recent AI critiques, with trade identifiers and message strings
Level ProgressionCurrent level integer + the lock status of subsequent levels
VerificationThe verified Polygon transaction URL

The backend assigns the payload two distinct UUIDs: a Public Token mapping to the raw payload, and a Redacted Token mapping to the scrubbed one (Ref: BR_4.16.1.13).

Consequences that are binding on the frontend:

  • The cinematic mounts over the historical clone, never over live state — "The trader must see the exact metrics they hit to pass."
  • The same stored payload feeds the authenticated path and the public /milestone/[unique-id] route, so an external visitor sees exactly the figures the trader passed on.
  • When the animation and certificate finish, the frontend must re-fetch and return the dashboard to its current live state. The clone is never left mounted.
  • 🔴 GET /certificate as specified today ({url, polygon_tx_hash, promotion_date, bonus_awarded, capital_allocation}) does not carry this payload. A snapshot field or a dedicated endpoint must be added and shared by both paths — see §10 item 1.

BR_4.16.1.5: Pending Motions, Consecutive Promotions, and Playing Once

  • Because trading is unlocked on Rithmic / TraderEvolution / MT5 immediately after a promotion is processed, a trader can hit consecutive targets without ever opening the dashboard. In that case only the latest motion, for the highest achieved tier, is played"Do not force them to sit through consecutive videos." (Source: [LUC-BIZ-02].)
  • ⚠️ "Latest only" applies to the MOTION alone. The skipped levels' snapshots and certificates are still stored — each level's certificate still exists and is still shareable. Only the video is not replayed.
  • A motion plays once automatically. After it has played it must not replay on the next login; it is thereafter reachable only through [Replay Video] on the Career tab (Ref: BR_4.16.1.17).
  • ⏳ The mechanism for "already played" is not yet confirmed by the client ([LUC-BIZ-04]). BA proposal: a played_at timestamp on the snapshot record, written when the modal closes at §5 step 12. See §10 item 2. Without it the cinematic replays on every login.
  • The Latest certificate panel shows the certificate of the trader's most recent level only. No archive list, no per-level browsing — see §10 item 5.

BR_4.16.1.6: The Composite Render Stack — Four Layers, Fixed Order

The sequence is not a video file. It is a composite React component rendering live in the browser, which is what allows every share link to preserve that trader's own dashboard state (Source: Level Up Cinematic Scene Handling.pdf §1; User journey - Certificate and Left Box.docx §2–§6).

#LayerTechniqueNotes
1Base — read-only dashboard cloneReact clone hydrated from the JSON payloadLayout hardcoded to 16:9. No responsive mobile breakpoints. On mobile the container renders letterboxed with an overlay instructing the visitor to rotate to landscape.
2Pre-liquid phaseFramer Motion on the PnL node (opacity + brightness pulse) · an invisible SVG overlay using stroke-dasharray / stroke-dashoffset to trace a gold stroke along the CSS Grid gapsRuns entirely in the DOM, before any video file plays. Motion (2) only.
3Liquid goldPre-rendered alpha-channel video layered over the clone — WebM on Chrome / Edge / Android, HEVC on Safari / macOS / iOS, selected by browser detectionThe clone stays visible through the transparent channel until the gold fills the screen. Because the DOM is locked to 16:9, the video aligns with the underlying elements on any device.
4CertificateLottie JSON for the frame layout and the handwritten signature stroke · Framer Motion for the staggered injection of the trader's data into the DOM · QR code generated in code, not shipped as an assetThe redaction blur is applied to the name element on this layer (Ref: BR_4.16.1.13).

Performance budget: under 300 KB for the sequence, with the Lottie and WebM/HEVC assets unloaded once it completes (Source: StackTrading_Technical_Proposal_v2.4.docx — Level-Up Cinematic budget). The 16:9 lock and the mobile rotate overlay are stated in the source for the shared/public surface; whether the authenticated dashboard replay adopts the identical lock is §10 item 6.

BR_4.16.1.7: Audio Is Orchestrated Client-Side, in Two Channels

Audio ships as separate asset files and is orchestrated in the client to sync with the composite layers (Source: Level Up Cinematic Scene Handling.pdf §1):

  • Base channel — the main cinematic track is triggered synchronously with the start of the WebM background playback (Ref: BR_4.16.1.6 layer 3).
  • Dynamic channel — UI SFX (writing / scratching, the stamp) are tied to the Framer Motion text-reveal events, so the audio duration matches the render time of that specific trader's data. A long name and a short name do not produce the same SFX length.
  • Interaction Gate — the public share URL must initialise on a premium Tap to View Milestone state to capture the user gesture that browser autoplay policy requires, which then calls AudioContext.resume() to unmute. That gate belongs to the public route, which is not covered by this document. Whether the authenticated auto-play needs an equivalent gate is unresolved — see §10 item 4.

BR_4.16.1.8: Reduce Motion Is Device-Local and Removes the Replay Path

Reduce Motion has no backend API. It is frontend-only, stored in localStorage, scoped to the device, never synced (Source: [CTRL-EP-02], 2026-08-24 — "A user may need to reduce motion on a weak travel laptop but keep the animations active on their powerful home desktop."). POST /accessibility-preference is dropped and reduce_motion is removed from the ui_preferences payload.

Effects on this UC:

  • [Replay Video] is hidden — not disabled — while Reduce Motion is on (Source: User journey - Certificate and Left Box.docx §Certificate Buttons — "Replay Video (muted color, hidden if on Reduce Motion)"). The certificate stays fully reachable through [View Certificate].
  • The cinematic's own guard reads the local value, per the scope directive of [CTRL-DEF-01]: disable continuous motion (infinite loops, background movement, pulsing), disable parallax/depth, and simplify heavy positional animations into fast opacity fades or instant state renders.
  • The unauthenticated /milestone/[unique-id] route runs on a stranger's machine and therefore has no trader localStorage; it must fall back to the browser's CSS prefers-reduced-motion — a rule owned by the public-route document, not by this one.
  • ⏳ The default on a brand-new device is still open ([CTRL-BIZ-02]) — see §10 item 7.

BR_4.16.1.9: Certificate — Fixed Content

These elements render on every certificate regardless of milestone, asset class or track:

#ElementContent
1SealThe Stack Trading emblem, above the frame
2HeadingCertificate of Promotion
3Presentation lineProudly presented to
4Trader nameThe trader's legal full name — the only PII element on the certificate, and the only element the redaction engine touches (Ref: BR_4.16.1.13)
5Authority lineHas earned the title and authority of
6Level + TitleLevel [N] - [Title] for the level being entered, resolved from Current Level Detail (Level, Title) — the same 24-level career path used by UC_4.12.6
7Left boxTitle / Amount / Subtitle — dynamic (Ref: BR_4.16.1.10)
8Right boxCapital Allocation + the allocation of the level entered (Ref: BR_4.16.1.11)
9Issue dateLabel Issued + promotion_date from GET /certificate, rendered in long form (e.g. March 4, 2026). Ref: CR-08 for the underlying ISO 8601 value
10SignatureThe founder's handwritten signature, animated as a Lottie stroke, over the caption Founder & CEO
11VerificationThe QR code and its polygonscan.com/tx/[transaction_hash] label (Ref: BR_4.16.1.12)

⚠️ Note the two different levels on one certificate: element 6 names the level the trader is entering (Level 7 - Trader), while the left box's title line names the level they just passed (Level 6 Performance Bonus). This is intentional and must not be normalised.

BR_4.16.1.10: Certificate — Dynamic Text Mapping of the Left Box

The left box renders three lines, conditionally on the trader's exact tier, asset class and compensation track (Source: User journey - Certificate and Left Box.docx §Certificate Dynamic Text Mapping):

#Trigger eventTop title lineCenter amount lineBottom subtitle line
1Passing Associate Track (entering L1, L2, L5)Associate Track ClearedLive Direct Market AccessProfessional Trader Path Unlocked.
2Passing Level 1Live Progression Achieved100% allocated to Capital ScalingInvesting in your success.
3Passing Level 2 (Futures only)Level 2 Bonus & Data Refund$[Total payout], where Total payout = Bonus Amount + Market Data RefundAwarded.
4Passing Levels 2, 3, 4, 5 (Standard)Level [X] Performance Bonus$[Bonus Amount]Awarded.
5Passing Level 6+ (US W2 Standard)Level [X] Performance Bonus$[Bonus Amount]Awarded in addition to W2 Base Salary & Benefits
6Passing Level 6+ (US W2 Flex Cash)Level [X] Performance Bonus$[Bonus Amount]Awarded in addition to W2 Flex Salary
7Passing Level 6+ (International)Level [X] Performance Bonus$[Bonus Amount]Awarded in addition to Monthly Retainer
8Passing Level 24Level 24 Prestige Cleared$[Bonus Amount]Maximum Capital Allocation Achieved

Resolution rules:

  • [X] is the level passed, not the level entered.
  • Row 3 is Futures only and its amount is a sum — the level bonus plus the market data refund of Flow 4 Step 13. Forex traders at Level 2 fall to row 4.
  • Rows 5–7 are selected by the trader's compensation track: compensation_track from the HR Integration endpoint / the Users table distinguishes Standard from Flex; International is the third branch. ⏳ Which field carries the US-vs-International discriminator is not stated in any source — see §10 item 8.
  • $[Bonus Amount] is bonus_awarded from GET /certificate, formatted per Ref: CR-11 (comma thousands separator, max 2 decimals) after rounding per Ref: CR-13.
  • All three lines are display-only. None is a link, a tooltip target or an interactive element.
  • Overflow: all three lines Wrap text. The name element (Ref: BR_4.16.1.9 element 4) also wraps — it is never truncated, because a truncated name would defeat the certificate's purpose and would break the redaction blur's visual weight.

BR_4.16.1.11: The Right Box Always Maps to the Level Being Entered

The right box renders the label Capital Allocation and, beneath it, the allocation of the level the trader is entering — expressed as the Futures E-Mini contract equivalent (e.g. 17 E-Mini Contracts, from Table B) or the Forex notional (Max_Forex_Notional, from Table A), whichever matches the trader's asset class (Source: User journey - Certificate and Left Box.docx"The Right side of course maps to the level they are entering (Forex Notional or Futures E-Mini equivalent)"). The value arrives as capital_allocation from GET /certificate; the frontend does not look up Table A/B itself.

BR_4.16.1.12: The QR Code Is a Cryptographic Receipt, and It May Not Exist Yet

  • The QR code is generated dynamically in code, never shipped as a static asset, and resolves to the public PolygonScan URL for the specific on-chain transaction hash of this milestone (Source: Level Up Cinematic Scene Handling.pdf §1). The hash comes from polygon_tx_hash (GET /certificate) — for the public route it comes from the Verification field of the stored payload (Ref: BR_4.16.1.4), so both surfaces resolve to the same transaction.
  • The text beside the QR renders the destination in the form polygonscan.com/tx/[transaction_hash]. It is a label, not a hyperlink — verification is performed by scanning the code. ⏳ Whether the client wants that text clickable is §10 item 10.
  • Pending state. If Polygon is down or the transaction fails, the certificate is still issued immediately for the trader to view, with no hash yet; Flow 4 does not halt and the mint is pushed into a background retry queue that writes the hash once the network recovers (Source: client confirmation, meeting 2026-08-05). While polygon_tx_hash is null the QR block renders its pending state and produces no scannable destination. The rest of the certificate is unaffected.
  • The trader is never blocked from sharing or downloading because the hash is missing.

BR_4.16.1.13: Redacted version — Two Tokens, Server-Side Scrubbing, Client-Side Blur

The toggle exists so the trader can post the milestone publicly without exposing their legal name.

Default state: OFF.

ToggleShare menu emitsPayload the recipient's browser receives
OFF (default)The URL carrying the Public Tokenstacktrading.com/milestone/[public_token]The real name (e.g. Alex Thompson) and is_redacted: false
ONThe URL carrying the Redacted Tokenstacktrading.com/milestone/[redacted_token]The real name stripped and replaced server-side by a dummy string of equal visual weight (e.g. XXXXXXXXXXXXXXX) and is_redacted: true

Binding rules (Source: User journey - Certificate and Left Box.docx §Redacted or Unredacted Sharing):

  • Redaction happens on the server, before the payload leaves it. "Personally Identifiable Information never touches the network." The React component stays completely unaware of the redaction logic — this is deliberate, to make DOM inspection useless as an exploit.
  • On the recipient's side, is_redacted: true makes the frontend animate the dummy string and apply a heavy frosted-glass filter: blur(12px) to that specific Framer Motion text element. is_redacted: false renders the name normally.
  • Open Graph parity. When a social platform's crawler queries the Redacted Token, the backend must serve the redacted static OG image — the name layer blurred before the file is exported — so the feed unfurls a privacy-safe card before anyone clicks through. The token also selects a different og:title, one that carries no name at all. The full contract, including the second image the backend must pre-generate and the canvas it is composed on, is BR_4.16.1.18.
  • On the trader's own surfaces (the certificate modal and the Career panel), switching the toggle ON applies the same blur to the on-screen name as a WYSIWYG preview of what a recipient will see, alongside switching which URL the share and copy controls emit (Source: client design pack 2026-08-26, redacted frame).
  • The toggle governs share and copy only. It writes nothing to the server, changes nothing about the certificate record, and is not persisted between visits — every mount starts at OFF.
  • 🟡 The redacted variant of the video-motion share was called "ideal" by the client but never firmly committed ([LUC-UI-02]). It is written here as in scope because the same two tokens serve both; see §10 item 11.

  • Exactly five targets: LinkedIn · X · Facebook · Reddit · Copy Link (Source: [LUC-UI-01]).
  • All four social links share the video — that is, the hosted shareable URL that mounts the live cinematic. None of them shares a bare still image. The high-resolution certificate still appears only as the og:image unfurl inside the social feed, which routes the reader to the live sequence when clicked (Source: Level Up Cinematic Scene Handling.pdf §2).
  • Activating a social icon triggers that platform's native share intent / draft post, pre-populated with the trader's unique public URL, opened in a new tab. The Dashboard does not compose the post text, does not authenticate against the platform, and receives no callback — whether the trader actually posts is invisible to us.
  • The URL carried is the Public or the Redacted token per the toggle at the moment of the click (Ref: BR_4.16.1.13).
  • The label above the row is Share Level Up Video. The former wording Share Milestone is withdrawn and must not appear anywhere in the UI (Source: User journey - Certificate and Left Box.docx §Changes item 1).

Activating the Copy Link control copies the same public URL directly to the system clipboard and shows the lightweight toast Ref: TS-CERT-01. No modal opens, no navigation occurs and nothing is written server-side. If the browser refuses the clipboard write, nothing is copied and the toast is not shown (Ref: §7).

BR_4.16.1.16: Download Certificate — One Fixed Format, Exported Client-Side

  • Activating [Download Certificate] triggers a client-side export of the static final frame of the certificate, downloaded straight to the trader's device (Source: Level Up Cinematic Scene Handling.pdf §3). It is not a server round-trip and it is not the legacy S3 PDF at url.
  • The format is fixed by the system, with no picker — the client's ruling was "pick one that is most suitable, user choice is out of scope… likely whatever is higher fidelity, which is JPEG I believe" (Source: [LUC-UI-03]).
  • BA reading, pending confirmation: the export is WYSIWYG — it captures the frame as currently rendered, so with Redacted version ON the downloaded file carries the blurred name. See §10 item 12.

BR_4.16.1.17: The Control Set and Its Two Layouts

Both surfaces expose the same capabilities; only the layout differs.

Certificate modal (end of the sequence) — a two-step reveal:

  1. Final state: [Replay animation] · [Share Level Up Video].
  2. After [Share Level Up Video]: Share Level Up Video to: + the five targets · [Download] · Redacted version toggle.

Career tab, Latest certificate panel — the client asked for the same components reused and consolidated, accepting that it becomes two rows (Source: User journey - Certificate and Left Box.docx §Certificate Buttons):

RowControls
1Share Level Up Video + the five social/copy targets — rendered already expanded, no second click
2[View Certificate] · Redacted ON/OFF toggle · [Download Certificate] · [Replay Video]

Two conditions attach to row 2:

  • [View Certificate] is the row's optional member — the client's own note is "IF we are close to keeping it 1 row, this one can be removed". It is specified here as present; if it is dropped, the still certificate in the panel becomes the only view path and nothing else changes.
  • [Replay Video] is hidden whenever Reduce Motion is on (Ref: BR_4.16.1.8).

Visual emphasis (which controls are gold and which are muted) is a design concern and is deliberately not specified here; the client's instruction — the five share icons become the emphasised controls and [Download Certificate] becomes muted — is recorded for the design team in §10 item 13.

Everything a social feed shows before the click is static. Crawlers do not execute JavaScript, so none of them can render the React / Framer Motion sequence (Source: [LUC-UI-08], Adrian Stack, 2026-09-03 — "Because social media scrapers do not run JavaScript, they cannot render our React/Framer Motion sequence."). The unfurl is therefore entirely a backend obligation: static markup plus a static file, both produced ahead of time.

a. The <meta> tags are resolved from the token payload, per token. The two tokens of BR_4.16.1.13 do not merely swap the image — they swap the title as well:

TagPublic TokenRedacted Token
og:title[Trader Name] just reached Level [X] at Stack Trading.A Stack Trader just reached Level [X].
og:descriptionWatch the live cinematic promotion sequence and view the verified milestone.identical
og:imageThe Public Token OG image (rule b)The Redacted Token OG image (rule b)

[X] is the level being entered (Ref: BR_4.16.1.11). The redacted title is not a blurred or masked name — it is a different sentence: the trader's name must not appear in the Redacted Token's markup in any form, in any tag.

b. Two static images are generated per milestone, not one. "Yes, every shared link requires generating a static certificate image dynamically." Because the certificate data is hyper-personalised, the Node.js backend generates a static image of the final certificate state at the moment the milestone is reached, and serves that URL in <meta property="og:image"> on the public share route:

ImageContent
Public Token OG imageThe clean, unredacted certificate
Redacted Token OG imageThe same certificate with a heavy blur filter applied to the name layer before the static file is exported

Both are produced unconditionally, for every milestone — not on demand when the trader flips the toggle, and not at share time. The redacted file must already exist the instant a trader toggles Redacted version on and posts, or the platform unfurls the real name.

c. The image is composed, not exported bare. Scrapers expect a 1200×630 px canvas; exporting the certificate alone lets platforms crop the top and bottom and cut off the gold stamp or the signature. The backend composes the final JPG from a base template:

LayerSpecification
CanvasExactly 1200 × 630 px
BackgroundThe dark diamond / carbon texture pattern, filling the entire canvas — supplied as an asset from the Dashboard UI Kit, not re-drawn
CertificateThe generated certificate (public or redacted), centred perfectly, scaled so its top and bottom edges fit within the 630 px height
Depth (bonus)A dark drop shadow behind the certificate layer so it lifts off the texture — "like a premium physical card resting on a desk". Explicitly a "bonus points" request, not a commitment

The client asks Sotatek to confirm the backend will use a composition tool — Puppeteer or Node Canvas were named — to merge the layers and add the shadow before exporting the final OG image URL (Ref: §10 item 17).

d. Where it sits in the pipeline. Generation is triggered at promotion, so it belongs beside the snapshot write of BR_4.16.1.4 — a new step in Flow 4, and in Flow 3H for the first SIM → LIVE certificate (§10 item 3). ⚠️ Note the collision with BR_4.16.1.12: polygon_tx_hash may still be null at that instant, which would freeze both images with a permanently pending QR block. The retry queue must re-compose both once the hash lands — see §10 item 16.

Scope note. This BR specifies what the backend produces and serves in the <head>. What the recipient sees after clicking through — the public page, its Tap to View Milestone gate, its cinematic — remains the separate public-route deliverable (§1).

9. Screen Description

9.1 Level certificate modal

No.Field NameField TypeDisplaying rule / Behaviour rule
1CloseButton (Icon)Displaying rule:- Rendered in the modal's top-left corner, present in every state of the modal.Behaviour rule:- On activation: unmounts the modal and the read-only dashboard clone behind it, then the frontend re-fetches the live dashboard and the Command tab returns to current data. Ref: BR_4.16.1.4.- Impact: on entry point A/A' this is also the point at which the motion is marked played, so it does not replay at the next login. Ref: BR_4.16.1.5.- On entry point B the overlay is unmounted and the trader is returned to the Career tab exactly where they left off — same scroll position, same panel state. The Career tab was never unmounted and is not re-fetched, because no route change ever occurred. Ref: [LUC-UI-07], BR_4.16.1.2.
2Certificate — fixed blockLabelDisplaying rule:- Seal · Certificate of Promotion · Proudly presented to · trader name · Has earned the title and authority of · Level [N] - [Title] for the level entered. Ref: BR_4.16.1.9.- On the auto-play and replay paths these elements are revealed in a staggered Framer Motion sequence rather than appearing at once. Ref: BR_4.16.1.6.- Overflow: Wrap text on every line, including the name.Behaviour rule:- Read-only. No element is clickable and none carries a tooltip.
3Trader nameLabelDisplaying rule:- The trader's legal full name. The only PII element on the certificate.- [If the Redacted version toggle is ON] → the element renders with a heavy blur as a preview of the recipient's view. Ref: BR_4.16.1.13.- Overflow: Wrap text — never truncated.Behaviour rule:- Read-only. The trader cannot edit the rendered name here; it comes from the account record.
4Left box — title / amount / subtitleLabelDisplaying rule:- Three lines resolved from the milestone, asset class and compensation track per the 8-row mapping. Ref: BR_4.16.1.10.- Monetary values formatted per Ref: CR-11.- Overflow: Wrap text.Behaviour rule:- Read-only.
5Right box — Capital AllocationLabelDisplaying rule:- Label Capital Allocation + capital_allocation for the level being entered — Futures E-Mini contract equivalent or Forex notional. Ref: BR_4.16.1.11.- Overflow: Wrap text.Behaviour rule:- Read-only.
6Issued dateLabelDisplaying rule:- Label Issued + promotion_date rendered in long form. Ref: BR_4.16.1.9 element 9, CR-08.- Overflow: Wrap text.Behaviour rule:- Read-only.
7Signature blockLabelDisplaying rule:- The founder's signature, drawn as a Lottie stroke on the animated paths and shown complete on the still paths, above the caption Founder & CEO. Ref: BR_4.16.1.6.Behaviour rule:- Read-only, not clickable.
8QR code + hash labelLabelDisplaying rule:- QR generated in code, resolving to the PolygonScan transaction URL, beside the text label polygonscan.com/tx/[transaction_hash].- [If polygon_tx_hash is null] → the pending state renders and no scannable destination is produced. Ref: BR_4.16.1.12.- Overflow: Wrap text.Behaviour rule:- The label is display-only, not a hyperlink; verification is by scanning. Ref: §10 item 10.
9Replay animationButtonDisplaying rule:- Label Replay animation. Rendered in the modal's final state.- Hidden when Reduce Motion is on. Ref: BR_4.16.1.8.Behaviour rule:- On activation: restarts the sequence from the read-only clone, using the snapshot already held in the client. Ref: §5 step 11.- No navigation. The overlay restarts in place over whatever surface it was mounted on; the route is never changed. Ref: [LUC-UI-07], BR_4.16.1.2.- Impact: none server-side. No request is issued, no state is written, the played flag is unchanged.
10Share Level Up VideoButtonDisplaying rule:- Label Share Level Up Video. The former Share Milestone wording is withdrawn. Ref: BR_4.16.1.14.Behaviour rule:- On activation: replaces the two-button row with the expanded share menu (rows 11–14). Pure UI state change — no request, no navigation.
11Share targets — LinkedIn · X · Facebook · RedditButton (Icon)Displaying rule:- Four icons under the label Share Level Up Video to:, in the expanded menu. Always all four; none is ever conditionally hidden.Behaviour rule:- On activation: opens the platform's native share intent / draft post in a new tab, pre-populated with the trader's public milestone URL — the Public Token URL when Redacted version is OFF, the Redacted Token URL when it is ON. Ref: BR_4.16.1.13, BR_4.16.1.14.- Impact: none server-side. The Dashboard receives no callback and never learns whether the post was published.
12Copy LinkButton (Icon)Displaying rule:- The fifth target in the same row.Behaviour rule:- On activation: writes the same URL to the system clipboard and shows Ref: TS-CERT-01. No modal, no navigation. Ref: BR_4.16.1.15.- If the browser refuses the write: nothing is copied and no toast is shown.
13DownloadButtonDisplaying rule:- Label Download with a download icon, in the expanded menu.Behaviour rule:- On activation: exports the static final frame of the certificate client-side, in the single system-fixed format, and downloads it to the device. No format picker. Ref: BR_4.16.1.16.- Impact: none server-side.
14Redacted versionToggle/SwitchDisplaying rule:- Label Redacted version, below the share row. Defaults to OFF on every mount; the state is not persisted. Ref: BR_4.16.1.13.Behaviour rule:- OFF → ON: the share and copy controls switch to the Redacted Token URL, and the on-screen name (row 3) renders blurred as a preview.- ON → OFF: both revert.- Impact: display and outbound URL only. Nothing is written to the server, the certificate record is untouched, and links already copied or posted keep pointing at whichever token was active when they were emitted — toggling afterwards does not revoke a URL already shared.

9.2 Career tab — Latest certificate panel

Only the certificate panel is described. The Employment status, Current level, Base salary, Benefits, Vacation days, Next pay date, [Manage Payouts] and [View in Rippling] tiles on the same tab are out of scope here — Ref: UC_4.16.2 §9, BR_4.16.1.1.

No.Field NameField TypeDisplaying rule / Behaviour rule
1Panel headerLabelDisplaying rule:- Static text Latest certificate. The panel keeps its grid slot at all times and is never hidden.- Overflow: Wrap text.Behaviour rule:- Read-only.
2Certificate stillLabelDisplaying rule:- The certificate's final frame, rendered statically — no motion, no audio, no dashboard clone behind it. Content identical to §9.1 rows 2–8. Ref: BR_4.16.1.2.- [If GET /certificate fails] → the panel renders its error state and shows Ref: TE-SYS-01; the rest of the Career tab is unaffected. Ref: §7.- Shows the most recent level's certificate only — there is no archive list. Ref: BR_4.16.1.5.- Overflow: Wrap text on all text lines.Behaviour rule:- Read-only as a surface; the controls below it carry all interaction.
3Share Level Up Video + 5 targetsLabel + Button (Icon) ×5Displaying rule:- Row 1 of the control set: the label followed by LinkedIn · X · Facebook · Reddit · Copy Link, already expanded — this surface has no collapsed state. Ref: BR_4.16.1.17.Behaviour rule:- Identical to §9.1 rows 11 and 12 — native share intent in a new tab for the four social targets, clipboard write plus Ref: TS-CERT-01 for Copy Link, both honouring the toggle in row 5.
4View CertificateButtonDisplaying rule:- Label View Certificate, row 2 of the control set. Optional member of the row — the client accepts its removal if the row must fit on one line. Ref: BR_4.16.1.17.Behaviour rule:- On activation: opens the certificate modal (§9.1) directly at its final state — no motion, no audio, no clone. Ref: §6 step 5.- Impact: none server-side.
5Redacted versionToggle/SwitchDisplaying rule:- Label Redacted version, row 2. Defaults to OFF on every mount. Ref: BR_4.16.1.13.Behaviour rule:- Identical to §9.1 row 14 — switches the emitted URL between the Public and Redacted tokens and blurs the on-screen name as a preview. Governs the certificate still in row 2 as well as the modal opened from row 4.
6Download CertificateButtonDisplaying rule:- Label Download Certificate, row 2.Behaviour rule:- Identical to §9.1 row 13 — client-side export of the static final frame in the single system-fixed format. Ref: BR_4.16.1.16.
7Replay VideoButtonDisplaying rule:- Label Replay Video, row 2.- Not rendered at all when Reduce Motion is enabled on this device — hidden, not disabled. Ref: BR_4.16.1.8.Behaviour rule:- On activation: mounts the full-screen cinematic overlay directly on top of the Career tab by z-index, builds the read-only clone from the stored snapshot inside the overlay, and replays the full sequence, audio included, ending on the certificate modal. Ref: §6 step 4.- No route change. The trader is not navigated to the Command tab first; on [Close] the overlay unmounts and returns them to the Career tab exactly where they left off. Ref: [LUC-UI-07], BR_4.16.1.2.- Impact: none server-side. No backend event is re-fired and the played flag of BR_4.16.1.5 is not changed — a replay is always a replay, never a first play.

10. Open Items Pending Client / BE Confirmation

#ItemWritten in this UC asWhy it needs a rulingSeverity
1GET /certificate cannot feed the read-only clone. Its response is {url, polygon_tx_hash, promotion_date, bonus_awarded, capital_allocation} — no metric snapshot, no level/title, no token UUIDs. [LUC-BIZ-03] (the exact snapshot_json field list) is still formally open with the client.The field list of BR_4.16.1.4 is taken from User journey - Certificate and Left Box.docx §1, which enumerates the modules in prose; it is written here as the contractThe frontend cannot mount the clone without it, and the authenticated and public views would diverge. A snapshot store (proposed level_promotion_snapshots) and a new step in Flow 4 after Step 10 are new backend scope present in no source. Blocking for BE.🔴
2How is a motion marked "already played", and may it be replayed? ([LUC-BIZ-04].)BA proposal: a played_at timestamp written when the modal closes; replay is available indefinitely from the Career tab (Ref: BR_4.16.1.5)Without the flag the cinematic replays on every single login. Blocking for BE.🔴
3Flow 3H has no certificate/cinematic trigger step. The client confirmed at the 2026-08-05 meeting that the cinematic and certificate apply to every milestone including the first SIM → LIVE promotion, but the exact Zapier change was never specified.Written as the producer of entry point A for the Associate Track certificate (§5 step 1)If Flow 3H is not patched, the very first certificate a LIVE trader is entitled to — Associate Track Cleared — never fires. Blocking for BE / Zapier.🔴
4Does the authenticated auto-play need its own interaction gate? The Tap to View Milestone gate is specified only for the public share URL. A trader who left the tab open and has not interacted since load will hit the browser's autoplay policy on entry point A.Written as: the sequence plays and only audio is suppressed until a gesture occurs (§7)Either an authenticated gate is designed, or the client accepts a silent first play. Affects the emotional payload the whole feature exists for.🟡
5Is there any certificate history? The WBS says "lastest certificate" and the design shows one. But [LUC-BIZ-05] notes every passed level keeps its own certificate, and skipped-motion levels still store theirs.Written as latest-only, no archive (Ref: BR_4.16.1.5)If the client wants a history, it is a new panel, a new endpoint shape and new share URLs per level. Also drives [LUC-BIZ-05] — how many Polygon mints are paid for.🟡
6Does the 16:9 lock and mobile rotate overlay apply to the authenticated replay? The source states it for the shared/public clone.Written as a property of the clone layer, flagged as source-scoped to the public surface (Ref: BR_4.16.1.6)A trader replaying on a phone would otherwise get an unspecified layout.🟡
7Reduce Motion default on a brand-new device ([CTRL-BIZ-02]).Not specified here; BA proposal on record is to seed from the CSS prefers-reduced-motion media query, then let an explicit choice override and persist to localStorageIf the default is always off, a motion-sensitive trader gets the full cinematic on their first visit on every new device — exactly the group the toggle exists to protect.🟡
8Which field carries the US-vs-International discriminator for rows 5–7 of the text mapping? compensation_track separates Standard from Flex but not US from International.Rows 5–7 written verbatim from the client table, with the discriminator marked unresolved (Ref: BR_4.16.1.10)An International Level 6+ trader would otherwise render a W-2 subtitle they do not have. Blocking for BE contract.🟡
9The design frame labelled "International or Level 1-5" renders no bottom subtitle line at all, while the client's own mapping table gives Awarded. for Levels 2–5 Standard and Awarded in addition to Monthly Retainer for International. The two client artefacts disagree.Written to the mapping table, which is the more explicit artefact (Ref: BR_4.16.1.10)One of the two is wrong. Also note the frames render W-2 Base Salary and Corporate Benefits where the table says W2 Base Salary & Benefits — the exact string must be pinned before build.🟡
10Is the polygonscan.com/tx/[hash] text a hyperlink?Written as a display-only label; verification is by scanning the QR (Ref: BR_4.16.1.12)Trivial to build either way, but it changes whether a desktop viewer can verify without a phone.🟢
11Redacted toggle on the video-motion share was called "ideal", never committed ([LUC-UI-02], Open Item #3 in the STAGE 2 QnA).Written as in scope, since one pair of tokens serves both the still and the video (Ref: BR_4.16.1.13)If the client scopes it out, the toggle must be removed from the video surface and only the certificate-only share keeps it.🟡
12Does Redacted version affect the download? The source specifies redaction for the share URL and the OG image, and is silent on the local export.BA reading: WYSIWYG — the export captures the frame as rendered, so ON produces a blurred file (Ref: BR_4.16.1.16)A trader who redacts and then downloads to post manually would otherwise leak the name they just hid.🟡
13Visual emphasis of the button set. The client asked to "flip the visual button colors — the download certificate should be muted, the 5 share icons should be the gold buttons", and for Replay Video to be muted.Deliberately not written into this SRS — visual styling is excluded by project rule. Recorded here so the design team receives itThe design pack still shows the pre-change emphasis. Design task, not a build blocker.🟢
14Both new client files are absent from _SOURCE_MANIFEST.yaml. User journey - Certificate and Left Box.docx and Level Up Cinematic Scene Handling.pdf sit in References/Customer supplies/(Stage 2) Community & Settings/ but carry no manifest entry, priority or category tag. The design pack of 2026-08-26 is not in References/Wireframe/ either.Cited by their real filenames throughoutEvery citation in this UC currently points at a file the manifest does not know about, which will fail a source-of-truth audit. Traceability.🟢
15Does the "self-contained overlay" reasoning apply back to entry point A? [LUC-UI-07] removed the Command-tab route change from the manual replay because "there is absolutely no reason to force a background route change" — yet [LUC-UI-04] still mandates exactly that redirect on LEVEL_PROMOTION. Both use the same overlay component.Written as: A still redirects, B never does (Ref: BR_4.16.1.2)The two rulings sit uneasily together. If the redirect is dropped on A as well, the [LUC-UI-06] DND-state registry — the useDndSnapshot() hook and CINEMATIC_RESTORE action built to survive that redirect — loses most of its purpose, which is confirmed FE scope from 2026-08-28.🟡
16Are the two OG images re-composed when polygon_tx_hash arrives late? BR_4.16.1.18 generates them "at the moment the milestone is reached", but BR_4.16.1.12 allows the hash to be null at that instant while the mint sits in the retry queue.Written as: the retry queue must re-compose both images when the hash is writtenWithout it, every link ever shared for that milestone unfurls a certificate whose QR block is permanently pending, long after the hash landed successfully. No source covers the re-compose. Blocking for BE.🔴
17Confirm the composition tool and the texture asset. The client explicitly asked us to confirm the backend will use a composition tool (Puppeteer or Node Canvas named) to merge the layers and add the drop shadow. The dark diamond / carbon texture must also be delivered as a file from the Dashboard UI Kit.Written as required backend scope with the tool left open (Ref: BR_4.16.1.18 rule c)It is a direct question from the client awaiting our answer, and the texture asset is a Design dependency, not something the backend should re-draw. The drop shadow is flagged "BONUS POINTS" — treat as nice-to-have, not commitment.🟢
18twitter:card and long-name truncation are unspecified. The client's ruling covers Open Graph only. X/Twitter will not render og:image at banner ratio without <meta name="twitter:card" content="summary_large_image">, and og:title is truncated at roughly 60 characters by Facebook and 70 by X — long trader names would cut off the "just reached Level X" clause.Not written into BR_4.16.1.18; recorded hereThe whole point of the 1200×630 composition is defeated on X — the first platform the client names in the Redaction Rule — and a truncated title loses the viral message the feature exists for.🟡

11. Build Ownership

ItemSotatek buildsStack Trading Ops configuresThird party runs
The certificate modal, the cinematic component and the Latest certificate panel✅ Frontend
The four render layers — WebM/HEVC playback, Lottie, Framer Motion, SVG grid, in-code QR generation✅ Frontend
The WebM/HEVC alpha-channel files, the Lottie JSON and the audio assets❌ — integrated, not authoredDesign / motion team supplies them
GET /certificate and the snapshot store + endpoint of BR_4.16.1.4✅ Backend
Public Token / Redacted Token issuance and the server-side PII scrub✅ Backend
The two static OG images per milestone — clean + name-blurred — composed on the 1200×630 canvas over the Dashboard UI Kit texture, with the drop shadow, and the token-driven og:title / og:description / og:image tags on the public route (Ref: BR_4.16.1.18)✅ Backend (Node.js, via a composition tool — Puppeteer / Node Canvas, §10 item 17)
The dark diamond / carbon texture used as the OG background❌ — consumed, not authoredDesign team supplies it from the Dashboard UI Kit
Minting the promotion receipt and returning polygon_tx_hash, plus the background retry queue✅ BackendPolygon PoS via Alchemy RPC
Flow 4 promotion chain and the Flow 3H patch of §10 item 3✅ Backend endpoints called by the flows✅ owns the Zap definitionsZapier
Level parameters, bonuses and titles behind the certificate values (Table A / Table B)✅ via Zapier Tables, no deploymentZapier
The social share intents❌ — the platforms' own intents are openedLinkedIn · X · Facebook · Reddit
The surrounding Career tab HR values — PTO, next pay date, benefits, Manage Payouts✅ read + display + deep link only✅ owns the Rippling configurationRippling owns PTO logic, accrual and approval (Ref: [HR-DEF-01])

Changelog

DateVersionUpdated itemBeforeAfterNotes
2026-08-26v1Initial documentCreated from User journey - Certificate and Left Box.docx and Level Up Cinematic Scene Handling.pdf (client-supplied, References/Customer supplies/(Stage 2) Community & Settings/), the client design pack of 2026-08-26, RFQ_ Website and Dashboard Implementation V7.pdf §Part C, RFQ_ Stack Trading Prop Tech V7.pdf (LEVEL_PROMOTION, Certificate, HR Integration, Current Level Detail) and the client-confirmed QnA items [LUC-BIZ-02], [LUC-UI-01][LUC-UI-04], [HR-DEF-01], [CTRL-DEF-01], [CTRL-EP-02]. Scoped per BA instruction to the certificate only — the remaining Career & HR tiles are excluded, and the promotion mechanics are left to STAGE 6. New toast TS-CERT-01 added to list-toast-popup.md for the Copy Link confirmation. 14 open items recorded in §10, of which 3 are blocking for BE.
2026-09-03v1.2Entry point B — where the cinematic mounts[Replay Video] replayed "§5 steps 3 → 9", silent on routing; BR_4.16.1.2 recorded only "Dashboard clone behind it" for B2[Replay Video] mounts the full-screen cinematic as a z-index overlay directly on the Career tab, builds the read-only clone inside the overlay, and on [Close] returns the trader to the Career tab exactly where they left off. No route change, no React Router transition, no Command-tab redirect — that rule now applies to entry point A onlySource: [LUC-UI-07] (Adrian Stack, 2026-09-03) — "Your intuition is exactly right. Please play it directly on the Career tab… This prevents unnecessary React router navigation." Also records that the overlay is the same standalone public share component the public /milestone route mounts. BR_4.16.1.2 table restructured with Route change and Where the trader lands on close columns; §2, §5 step 2, §6 step 4, §9.1 rows 1 & 9 and §9.2 row 7 aligned. New open item §10 item 15 — the same reasoning arguably deletes the entry-point-A redirect of [LUC-UI-04] and with it the [LUC-UI-06] DND registry
2026-09-03v1.2The Open Graph unfurlHalf a bullet inside BR_4.16.1.13"the backend must apply the identical blur to the name layer of the high-resolution static image served to og:image"; the unfurl was otherwise declared out of scopeNew BR_4.16.1.18 — token-driven <meta> tags (og:title branches to a different sentence for the Redacted Token, not a masked name), two static OG images generated per milestone at promotion time, and the composition spec: exactly 1200×630 px, dark diamond/carbon background from the Dashboard UI Kit, certificate centred and scaled to the 630 px height, dark drop shadow (bonus)Source: [LUC-UI-08] (Adrian Stack, 2026-09-03). Entirely new backend scopeLevel Up Cinematic Scene Handling.pdf §2 says only "OG injection". The <head> contract is now owned by this UC (it is produced at promotion time); the public page's own rendering stays with the public-route deliverable. 3 further open items added: 16 (🔴 both images must be re-composed when a late polygon_tx_hash lands, else the QR unfurls as permanently pending), 17 (🟢 confirm Puppeteer vs Node Canvas + the texture asset from Design), 18 (🟡 twitter:card = summary_large_image and og:title truncation for long names are unaddressed). §11 Build Ownership updated
2026-08-26v1.1UC ID realignmentUC_4.16.2 — Career & HR Widget: Certificate & Level-Up MotionUC_4.16.1 — Level-Up Cinematic & CertificateRenumbered to match the WBS, which assigns UC_4.16.1 = Level-Up Cinematic & Sharing and UC_4.16.2 = Career & HR Widget. All BR_4.16.2.x anchors became BR_4.16.1.x; the out-of-scope Career tiles now cross-reference the new UC_4.16.2. The unauthenticated /milestone/[unique-id] route remains undocumented — it sits inside this same WBS item as a separate deliverable, no longer attributed to a different UC ID.

On this page

UC_4.16.1: Level-Up Cinematic & Certificate (LIVE)Document References1. Overview2. Trigger3. Pre-conditions4. Post-conditions5. Basic Flow — Entry Point A: automatic play on promotion6. Alternative Flow — Entry Point B: the Latest certificate panel on the Career tab7. Exceptional Flow8. Business RulesBR_4.16.1.1: This UC Owns the Certificate Only — and Only for LIVEBR_4.16.1.2: Two Entry Points, One Component — and Exactly Where Motion PlaysBR_4.16.1.3: Two Motion Tiers, Decided by the MilestoneBR_4.16.1.4: The Cinematic Never Renders Over Live DataBR_4.16.1.5: Pending Motions, Consecutive Promotions, and Playing OnceBR_4.16.1.6: The Composite Render Stack — Four Layers, Fixed OrderBR_4.16.1.7: Audio Is Orchestrated Client-Side, in Two ChannelsBR_4.16.1.8: Reduce Motion Is Device-Local and Removes the Replay PathBR_4.16.1.9: Certificate — Fixed ContentBR_4.16.1.10: Certificate — Dynamic Text Mapping of the Left BoxBR_4.16.1.11: The Right Box Always Maps to the Level Being EnteredBR_4.16.1.12: The QR Code Is a Cryptographic Receipt, and It May Not Exist YetBR_4.16.1.13: Redacted version — Two Tokens, Server-Side Scrubbing, Client-Side BlurBR_4.16.1.14: The Share Targets Always Share the Video LinkBR_4.16.1.15: Copy LinkBR_4.16.1.16: Download Certificate — One Fixed Format, Exported Client-SideBR_4.16.1.17: The Control Set and Its Two LayoutsBR_4.16.1.18: The Link Preview — Token-Driven <meta> Tags and Two Pre-Composed 1200×630 OG Images9. Screen Description9.1 Level certificate modal9.2 Career tab — Latest certificate panel10. Open Items Pending Client / BE Confirmation11. Build OwnershipChangelog