From dee3d738acd020bd8cbce292de0b634c658aaa96 Mon Sep 17 00:00:00 2001 From: Kwaku Danso <72142185+cloud-dev101@users.noreply.github.com> Date: Tue, 19 May 2026 22:36:19 +0100 Subject: [PATCH] fix(tier2-g): explain the Gate clearly, kill the "everyone outside = fraud" misconception MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The previous pass made the labels friendlier but didn't actually explain what the Gate does. A real user (correctly) read "trusted networks" as "any guest outside my IP is treated as fraud," which is the opposite of what's happening — and missed the entire value prop: stopping forwarded invitation links from being used by uninvited people. That's the central pain GuestGuard solves; the Gate page has to lead with it, not bury it under controls. What changed on the Gate card: - Big value-prop block at the top in plain language: "Every guest gets their own personal invitation link. The Gate watches each link and stops forwarded or shared invitations from being used by people who weren't on your list." Also explicit: "Real invited guests don't notice it. You don't need to set anything up — the Gate is on by default with sensible settings." - New "How does the Gate work?" collapsible explainer with a 4-step walkthrough using Aunty Patience as the protagonist. Covers what signals the Gate looks at, when guests *do* get flagged, and the reassurance that normal day-to-day variation (Wi-Fi → mobile data, changing rooms) doesn't trigger anything. - Preset descriptions rewritten to talk about the actual pain instead of generic strictness levels. "Stops forwarded links from being used by people who weren't invited" lands much harder than "Recommended for most parties." - Trusted networks section opens with an explicit "What this is and isn't" panel that directly addresses the misconception: adding a network here is a *speed-up* for guests on your Wi-Fi, NOT a whitelist that classifies everyone else as suspicious. Empty state reads "No trusted networks — and that's fine. The Gate is doing its job" so a host doesn't feel they've missed a setup step. - Pill on the section header tags it "Optional · most hosts don't need this" to drop its prominence. The button copy went from "Use my current network" (which read like "approve myself") to "Trust the network I'm on right now." No backend changes. Internal Go names (FraudThresholds, /security/* endpoints) untouched — never user-visible, renaming would churn for zero end-user benefit. Co-Authored-By: Claude Opus 4.7 --- frontend/components/GateCard.vue | 161 ++++++++++++++++++++++++++----- 1 file changed, 139 insertions(+), 22 deletions(-) diff --git a/frontend/components/GateCard.vue b/frontend/components/GateCard.vue index 30be180..247edab 100644 --- a/frontend/components/GateCard.vue +++ b/frontend/components/GateCard.vue @@ -50,10 +50,30 @@ interface Preset { block: number } const PRESETS: Preset[] = [ - { id: 'relaxed', label: 'Relaxed', description: 'Only stop obvious gate-crashers.', medium: 50, high: 80, block: 95 }, - { id: 'balanced', label: 'Balanced', description: 'Recommended for most parties and gatherings.', medium: 30, high: 60, block: 85 }, - { id: 'strict', label: 'Strict', description: 'Tight check — good for weddings and private events.', medium: 25, high: 50, block: 70 }, - { id: 'very_strict', label: 'Very strict', description: 'VIP or high-profile guest list.', medium: 15, high: 35, block: 55 }, + { + id: 'relaxed', + label: 'Relaxed', + description: "Casual party — fine if friends share their link with each other.", + medium: 50, high: 80, block: 95, + }, + { + id: 'balanced', + label: 'Balanced', + description: "Recommended. Stops forwarded links from being used by people who weren't invited, without nagging anyone normal.", + medium: 30, high: 60, block: 85, + }, + { + id: 'strict', + label: 'Strict', + description: "Wedding or private event — uninvited plus-ones are a problem and the guest list matters.", + medium: 25, high: 50, block: 70, + }, + { + id: 'very_strict', + label: 'Very strict', + description: "VIP or high-profile guest list. Even small mismatches get flagged for your review.", + medium: 15, high: 35, block: 55, + }, ] const props = defineProps<{ @@ -247,14 +267,89 @@ function verdictLabel(v: string) {