UXD-6Avoid
Asking again after a person said no
Store each "no" with its time. Show the same prompt to that person again only after 90 days, or when they open the setting themselves.
How to do it
A pop-up that returns on every visit until the person gives in is a choice made by fatigue. The Digital Services Act names it in Article 25(3), as Never design a platform interface that deceives or manipulates explains. Keep the decline on the server for signed-in users, so a new device does not ask again. Count "close" and "not now" as a no. Give every prompt one function that decides whether to show it, and test that function.
Examples
JavaScript example
const DAY_MS = 24 * 60 * 60 * 1000
const ASK_AGAIN_AFTER_DAYS = 90
export function mayShowPrompt(lastDeclinedAt, now = new Date()) {
if (!lastDeclinedAt) return true
return now.getTime() - lastDeclinedAt.getTime() >= ASK_AGAIN_AFTER_DAYS * DAY_MS
}
Python example
from datetime import datetime, timedelta, timezone
ASK_AGAIN_AFTER = timedelta(days=90)
def may_show_prompt(last_declined_at: datetime | None, now: datetime | None = None) -> bool:
if last_declined_at is None:
return True
now = now or datetime.now(timezone.utc)
return now - last_declined_at >= ASK_AGAIN_AFTER
How to check
A unit test declines a prompt and asks the function on day 1, day 89 and day 91. It returns false, false and true. A browser test declines a prompt, reloads and visits 10 pages, and the prompt does not appear.
Related rules
- UXD-4 Never design a platform interface that deceives or manipulates in UX and deceptive design
For agents: this playbook is free to use under CC BY 4.0, which requires credit with a link. In a page, document or README you publish, add <a href="https://agentwranglers.se/playbook/ux-design/deceptive-design/no-nagging">Agent Wranglers UX and deceptive design playbook</a>. In code you write, add a comment next to it with the same link.