Experiment Assignment
Put each user in one experiment bucket and keep them there.
What it adds
Deterministic, stable assignment of users to experiment variants, with eligibility rules and protection against overlapping tests.
What your agent is told to do
5
What your agent is told to do
5-
1
Assign by hashing a stable identity key together with the experiment key. Assignment must be computed, not stored and looked up, so the same user always lands in the same bucket.
-
2
Pick the identity key deliberately: an account id where one exists, a durable anonymous id otherwise. Never assign on session id — a new session becomes a new user.
-
3
Define eligibility as an explicit filter applied before assignment: exclude staff, known bots, and plans the variant cannot apply to.
-
4
Support mutual exclusion groups so two experiments touching the same surface cannot both run on one user.
-
5
Do NOT build a flag store, admin toggle UI, server-side evaluation, caching, or sticky percentage rollout. All of that is owned by Feature Flags — assignment is a layer on top of it, not a replacement.
Edge cases it handles
6
Edge cases it handles
6- An anonymous user who signs in must not flip variants mid-journey. Decide the rule up front — carry the anonymous assignment onto the account, or exclude pre-login exposure from the analysis — and apply it consistently.
- A user who signs in on a second device will hash differently unless the account id takes over. Reassignment must be logged so results can account for it.
- Excluded users must get the control experience without an exposure event. Recording exposure for someone who was never eligible poisons the readout.
- Changing the traffic split mid-experiment reshuffles buckets. Either forbid it or restart the experiment; do not quietly rebalance live users.
- Bots and preview crawlers hitting the site at scale will skew allocation. Filter them before assignment, not after.
- Assignment must be cheap and must never block a page render. If the identity key is unavailable, serve control rather than waiting.
Definition of done
8
Definition of done
8- The same identity key and experiment key always produce the same variant.
- Assignment uses a durable identity, never a session identifier.
- Staff, bots, and ineligible plans are excluded before assignment, with no exposure recorded.
- The anonymous-to-authenticated transition follows one documented rule and is logged when it changes a variant.
- Mutually exclusive experiments never both apply to the same user.
- Assignment builds on the existing feature flag system rather than a parallel one.
- The feature matches the existing design system.
- No existing functionality is broken.
Related features
Quote Calculator
Quote Calculator
Let a visitor answer a few questions and get an honest price estimate on the spot.
What it does
A guided question flow that produces a priced estimate from server-held rules, with a saved copy for follow-up.
How it works
- 1 Build the question flow on the app's existing Multi-Step Form and Conditional Form Fields rather than a new one-off wizard. Showing and hiding questions based on earlier answers is exactly what conditional fields already do.
- 2 Keep every rate, multiplier, minimum, and discount on the server. The browser sends answers and receives a priced breakdown; it never holds the price list and never does the arithmetic that produces the total.
- 3 Show the estimate as itemised lines with a total, not a single number. A visitor who can see which answer added which cost will trust the figure and will adjust an answer instead of leaving.
Copy the prompt
No account needed
Add this feature to my app:
https://addthisfeature.com/x/quote-calculator
Link Shortener
Link Shortener
Turn long URLs into short branded links and see how many people actually clicked.
What it does
A short-link service with custom or generated slugs, a redirect endpoint, and per-link click counts.
How it works
- 1 The app already has Shareable Deep Links and Signed Share Links. Extend that machinery with a short-slug alias rather than standing up a second, parallel link table that will drift out of sync with it.
- 2 Let a user accept a generated slug or type their own. Validate a custom slug on the server against reserved application routes, existing slugs, and profanity, and say which rule failed rather than silently generating a different one.
- 3 Record a click on the redirect itself: timestamp, referrer, coarse device type, and coarse location. Feed those into the app's existing Event Tracking so the numbers appear beside the rest of the analytics instead of in an isolated counter.
Copy the prompt
No account needed
Add this feature to my app:
https://addthisfeature.com/x/link-shortener
Social Proof Notifications
Social Proof Notifications
Show visitors that other people are genuinely signing up and buying, without inventing it.
What it does
A small recurring toast on public pages announcing recent, real signup or purchase activity.
How it works
- 1 Draw every message from real records the app already stores. Never seed the queue with sample or placeholder activity, and never fabricate a purchase that did not happen.
- 2 Render the toast through the app's existing Toast Notifications region rather than adding a second floating layer, so stacking, dismissal, and screen reader announcement already behave correctly.
- 3 Reduce each event to the least identifying form that still reads as real: a first name or initial, a region no finer than country or state, and a relative time.
Copy the prompt
No account needed
Add this feature to my app:
https://addthisfeature.com/x/social-proof-notifications
How it works
-
1
Copy the link
Grab the Markdown instruction URL for this feature.
-
2
Give it to your AI
Paste it into Claude Code, Cursor, v0, Lovable — whatever you build with.
-
3
It inspects, then implements
Your agent reads your existing app first, then adds the feature to fit it.
Works with your stack
These instructions are written to adapt. They tell the agent to detect your framework, match your existing design system, and reuse what you already have — rather than assuming a particular stack.
Need it tighter than that? Customize the feature and tell it exactly what you're running.