import React, { useState } from 'react';
import { Camera, Phone, Mail, AlertTriangle, Trophy, Zap, Target, Clock, FileText, Mic, Share2 } from 'lucide-react';
const GaslightingTracker = () => {
// Active case state: which case is highlighted
const [activeCase, setActiveCase] = useState('afca');
// Running tally of the global gaslighting score
const [gaslightingScore] = useState(9847);
// Inputs and results for response generator
const [newSubmission, setNewSubmission] = useState('');
const [responseGenerated, setResponseGenerated] = useState('');
const [isGenerating, setIsGenerating] = useState(false);
// User story submission for bloggers/commenters
const [userStory, setUserStory] = useState('');
const [storyClipboardMsg, setStoryClipboardMsg] = useState('');
// Live “case studies” of institutional gaslighting
const liveCases = {
afca: {
name: "AFCA (Champion)",
status: "Active Gaslighting",
caseNumbers: ["12-25-256067", "CRM:02084000001535", "CRM:02088000001181"],
gaslightingLevel: 10,
techniques: [
"Schrödinger's Complaint (exists and doesn't exist)",
"Auto-Close System Blame",
"Circular Logic Mastery",
"Customer Service Suggestion After Months"
],
latestMove: "Suggests calling after months of email exchanges",
color: "from-red-500 to-red-700",
icon: "🏛️"
},
arma: {
name: "ARMA Debt Collection",
status: "Helpful Threat Active",
caseNumbers: ["76980560"],
gaslightingLevel: 8,
techniques: [
"Friendly Debt Collection",
"We're Here to Help (Pay Us)",
"Financial Difficulty Sympathy Theater"
],
latestMove: "$461.37 overdue with caring tone",
color: "from-orange-500 to-orange-700",
icon: "🚗"
},
art: {
name: "Australian Retirement Trust",
status: "Security Theater",
caseNumbers: ["MFA-2025"],
gaslightingLevel: 7,
techniques: [
"Security While Withholding Funds",
"MFA Compliance Theater",
"Account Protection Irony"
],
latestMove: "Multi-factor auth while blocking access",
color: "from-blue-500 to-blue-700",
icon: "💰"
}
};
// Famous phrases you might hear from institutional gaslighting
const gaslightingPhrases = [
"We received your correspondence; however, we do not have enough information",
"The complaint has been automatically closed by our system",
"I suggest you call afca and talk to one of our customer service officers",
"We're here to help with your outstanding balance",
"For your security, we're implementing additional verification",
"This matter has been escalated to our specialized team",
"We understand your frustration, however...",
"As per our previous correspondence which you may not have received..."
];
// Fun/professional response generator for satirical replies
const generateResponse = async () => {
setIsGenerating(true);
await new Promise(resolve => setTimeout(resolve, 2000));
const responses = [
`Dear [Institution Name],
Thank you for your email demonstrating peak bureaucratic artistry. I'm particularly impressed by your Schrödinger's Complaint approach - simultaneously received and not received.
I have documented this correspondence as Exhibit #${Math.floor(Math.random() * 100)} in my growing collection of institutional gaslighting. Your technique scores ${Math.floor(Math.random() * 3) + 8}/10 on the Kafka Scale.
I suggest YOU call ME when you've decided whether my complaint exists in your quantum filing system.
Regards,
Someone Who Records Everything`,
`To Whom It May Concern (Or Pretends Not To),
I acknowledge receipt of your non-acknowledgment of my complaint that both exists and doesn't exist in your parallel universe filing system.
Your automated system's decision to close what was never opened demonstrates cutting-edge bureaucratic innovation. I'm forwarding this to my legal team who specialize in institutional comedy.
Please don't suggest I call you. I have better things to do than engage with customer service roulette.
Best regards,
A Person With Functioning Brain Cells`,
`Dear Gaslighting Champions,
Congratulations! You've achieved new heights in bureaucratic absurdity. Your ability to receive correspondence while simultaneously lacking information is truly inspirational.
I'm creating a case study of your techniques for my "Institutional Gaslighting Hall of Fame." Your performance deserves recognition.
I'll be sharing this exchange with relevant ombudsmen who appreciate fine examples of administrative creativity.
Sincerely,
Your Biggest Fan (and Biggest Problem)`
];
setResponseGenerated(responses[Math.floor(Math.random() * responses.length)]);
setIsGenerating(false);
};
// Blogger helper: copy story to clipboard
const copyStory = () => {
navigator.clipboard.writeText(userStory);
setStoryClipboardMsg('Copied! Paste it into your blog, newsletter, or comments.');
setTimeout(() => setStoryClipboardMsg(''), 2000);
};
// The current case being analyzed
const currentCase = liveCases[activeCase];
return (
);
};
export default GaslightingTracker;
{/* BLOGGER HEADLINE */}
{/* Scoreboard and quick stats */}
Gaslighting Score: {gaslightingScore.toLocaleString()}
Active Cases: {Object.keys(liveCases).length}
{/* Blogger Case Selector */}
{/* Case details area */}
{/* Satirical Response Generator */}
{/* "Share Your Story" for other bloggers/commenters */}
{/* Famous Phrases */}
{/* Documentation Tips for bloggers */}
🎯 Live Institutional Gaslighting Command Center
Welcome, bloggers & sleuths: monitor, expose, and share the oddest examples of bureaucratic gaslighting, AI-style.
🏆 Select a Case Study
Click on a tile to dive deep into real-life examples – perfect for referencing in exposés, articles, or radio/podcast segments.
{Object.entries(liveCases).map(([key, case_]) => (
))}
{currentCase.icon} {currentCase.name} – {currentCase.status}
Level {currentCase.gaslightingLevel}/10
Techniques Detected
-
{currentCase.techniques.map((technique, index) => (
- {technique} ))}
Case Numbers & Latest Move
{currentCase.caseNumbers.map((num, index) => (
{num}
))}
Latest Move: {currentCase.latestMove}
Counter-Gaslighting Response Generator
Paste a gaslighting email here, and get a ready-to-share satirical response for your article or social post.
{responseGenerated ? (
{responseGenerated && (
)}
{responseGenerated}
) : (
Your devastating counter-response will appear here...
)}
Share Your Own Gaslighting Story
Bloggers/journalists: got your own wild institutional email or transcript? Paste it below to easily copy and share or kick off your own story.
🎭 Most Famous Gaslighting Phrases
{gaslightingPhrases.map((phrase, index) => (
))}
"{phrase}"
Ivan's Pro Documentation Strategy
Record Everything
Save calls, emails, and screen recordings
Build Your Timeline
Document all IDs, dates, contradictions
Spot the Pattern
Turn confusion into powerful blog content!