Skip to content

Pre-launch — Feature Flags & Rollout Plan

Audience

Onboarding managers, support, anyone fielding "why can't I see X?" questions during pre-launch.

Marketplace launch: May 15, 2026 All flags default to false (off). Verifluence fails closed — a misconfigured LaunchDarkly client or network outage leaves the platform in the safe pre-launch state.


TL;DR

Five LaunchDarkly flags gate everything pre-launch. Until they flip, streamers can sign up + complete profile + KYC, and operators can prepare + fund campaigns. Nobody can yet do anything that puts campaigns in front of streamers or money in motion.

FlagAudienceDefaultUnlocks when ON
streamer-marketplace-enabledstreamersoffInbox / Offers / Negotiations / Deals + browseable campaigns
streamer-trust-score-visiblestreamersoffTrust Score page + sidebar + dashboard CTA
streamer-public-profile-enabledstreamers + publicoff/s/:username public profile page + the Profile Visibility toggle on Personal Info
operator-streamer-discovery-enabledoperatorsoff/operator/streamers roster page
operator-deals-enabledoperatorsoffInbox / Offers / Negotiations / Deals + "Invite to campaign" buttons

What's open day 0 — no flag

Anyone we invite during pre-launch can do the following today, no flag flipping required:

Streamers

  • Sign up via Kick OAuth (consent-first flow)
  • Complete personal info (country + languages)
  • Link payout wallet (USDC address)
  • Submit KYC documents
  • View tracked Kick stream sessions
  • See their pre-launch onboarding checklist on the dashboard

Operators

  • Redeem invitation, complete account setup
  • Link wallet
  • Create campaigns
  • Fund campaigns (escrow deposits)

The amber pre-launch banner across the top of every authenticated page reminds users we're in pre-launch until May 15, 2026.


You can flip flags in any order, but the natural progression is:

StageFlags now ONWhat it enables
Stage 0 — today(none)Onboarding only. Operators stockpile prepared+funded campaigns. Streamers complete profile + KYC.
Stage 1 — pre-launch teaser (optional)operator-streamer-discovery-enabledOperators can browse the streamer roster and plan target lists. No actions yet — invites still gated.
Stage 2 — internal beta (optional)+ operator-deals-enabledOperators can send invites; only beta-test streamer accounts you've targeted will see them (since streamer-marketplace-enabled is still off). Invites silently queue against streamer inboxes.
Stage 3 — launch day+ streamer-marketplace-enabled + streamer-trust-score-visibleStreamers see the marketplace; queued invites surface; trust score becomes meaningful. Full two-sided flow live.

Short-circuit option: flip all four together on launch day if you don't need the staged validation.


Per-user vs global rollout

Each flag in LaunchDarkly can be:

  • Off for everyone (default — current state for all four)
  • On for specific users — target by streamer/operator email or LD context attributes — useful for dogfooding + beta testers
  • On globally — the launch-day flip

The frontend uses LD's user-context bridge, so flag evaluation is per-signed-in-user. Anonymous visitors fall through to the default (off) and get the public pre-launch splash.


What users see when flags are OFF

Streamers (streamer-marketplace-enabled off)

  • Sidebar: only Dashboard / Personal Info / Wallet / KYC / My Streams (Inbox, Offers, Negotiations, Deals hidden)
  • Top banner: "Verifluence is in pre-launch mode until May 15, 2026. Use this time to complete your streamer profile..."
  • Dashboard shows a pre-launch onboarding checklist instead of marketplace earnings tiles
  • Top-nav "Campaigns" disabled with a "Soon" badge
  • Direct nav to /campaigns, /campaign/:id, /profile/offers etc. → bounces to dashboard or splash

Streamers (streamer-trust-score-visible off)

  • "Trust Score" sidebar item hidden
  • "Trust score" CTA on the dashboard checklist hidden
  • Direct nav to /trust-score redirects to /profile/dashboard

Operators (either operator flag off)

  • Sidebar: gated items (Streamers, Inbox, Offers, Negotiations, Deals) filtered out
  • Top banner: "Use this time to prepare and fund your campaigns. Streamer discovery and dealmaking open closer to launch day."
  • "Invite to campaign" buttons hidden on streamer profile pages and roster cards
  • Direct nav to gated routes → bounces to /operator/campaigns

Anonymous visitors (streamer-marketplace-enabled off)

  • Landing page: hero shows "Pre-launch · Onboarding cohort opens May 15, 2026" pill instead of live campaign count
  • "Campaigns Paying Right Now" section hidden
  • /campaigns → splash with sign-up + sign-in CTAs (not a bare gate)
  • /campaign/:id → redirects to splash

Common onboarding scenarios

User reportsWhat's actually happeningWhat to do
Streamer: "I don't see any campaigns"Expected — streamer-marketplace-enabled is offShow them the dashboard checklist + KYC path. Mention the launch date.
Streamer: "Nothing is happening after I uploaded KYC docs"Expected — manual reviewThe dashboard now shows "Awaiting review" automatically once docs land. Reassure them; standard turnaround applies.
Operator: "I want to invite a streamer but don't see the button"operator-deals-enabled still offConfirm campaign is created + funded. Tell them invites open closer to launch.
Operator: "I revisited my invitation link and got 'expired'"They already redeemed it; account existsSend them to /signin with their email. The new smart-recovery message also surfaces this directly in the UI.
Streamer: "I started signing up via Kick but never got an email or finished"Pending row from a 30-min OAuth window. We auto-email a resume link at the 20-min mark.If >30 min has passed, ask them to start over at /streamer-signup. The new flow is two checkboxes + one click.
Streamer: "I clicked Remove on my Kick channel and now I'm locked out"Was a real footgun pre-PR #45. Fixed: the Remove button on Kick rows is hidden and the server returns 405.Should no longer happen. If it does on an old client, check streamer_channels.deleted_at IS NULL for that streamer and clear the timestamp.
Anyone: banner says May 15 but the date movedDate is currently hard-codedOpen a ticket — engineering ships a one-line PR to update.

Removing flags after launch

When a flag has been at 100% for 2+ weeks with no incidents, file a follow-up to:

  1. Delete the LD flag
  2. Remove the useFlag hook from frontend/src/lib/flags.ts
  3. Strip call sites and gating logic
  4. Drop the pre-launch banner once all gating flags are gone

Tracked in docs/engineering/infrastructure/feature-flags.md (engineering side).


Quick verification — am I correctly flagged?

Each flag is independently flippable per user from the LD admin. If a streamer or operator reports "I should see X but I don't":

  1. Check the LD project — flag list lives under VITE_LD_CLIENT_ID=69db76a0e485fc0a7e52d0a7
  2. Confirm the flag is targeted to their email / user-id
  3. Have them refresh — flag changes propagate within ~30 seconds via the LD streaming connection
  4. If still wrong, check the worker dashboard for any LD-side errors: https://grafana.verifluence.io/d/vf-worker

Verifluence Documentation