Your browser lacks required capabilities. Please upgrade it or switch to another to continue.
Loading…
<<silently>>
<</silently>>
<<browserwindow "" "browser-lightpink-lightpink">>
!Welcome to <strong>OnlyBans</strong>!
OnlyBans is an online platform where you post sexy content to attract fans and earn money. The sexier the photo, the more fans! The more fans, the more money! But if you’re too sexy, then your account might get suspended, shadowbanned, or deleted - and then you’ll have to start over. Besides avoiding censorship, you also want to protect your privacy as a sex worker.
Want to play?
[[Play.->what-is-your-name]]
<<linkreplace "Read more">><<include "StoryMenu">><</linkreplace>>
<</browserwindow>><<silently>>[[dummy->greetings]]
<</silently>><<backgroundvideo "typing">><</backgroundvideo>><<browserwindow "" "browser-white-blue">>Your name is
<<textbox "$playerName" $playerName autofocus>>
<<button "Submit" "greetings">>
<</button>>
<</browserwindow>>
[[How to Play]]
[[About]]
[[Credits]]<<back "Back to game.">>
<h2>How to play</h2>
Goal: Make $<<print $incomeTarget>> in $weekLimit weeks.
Make money by:
* posting photos that attract new paying fans
* earning tips
Avoid:
* Having your identity stolen or revealed.
* Having your account shut down.
* Stalkers and harassment
Use your mouse or finger to click links. Links are underlined and look like <<cycle "_temp">> <<option "THIS">><<option "that">><</cycle>>. Sometimes you can also click on photos. There is no undo or back button. There are some videos that you cannot click on; they are just for watching.
This game is fictionalized, but based on entirely true stories. Throughout the game, facts and real-life experiences will be shared.
If you get stuck or something is broken, you can <<link "Restart">><<script>>UI.restart();<</script>><</link>>.OnlyBans<<back "Back to game.">>
<h1>Credits </h1>
''Creator'': <a href="https://www.lenachen.com/">Lena Chen</a>
<<linkappend "<strong>Narration Nympho</strong>">> (Writer)<</linkappend>>: Lena Chen
<<linkappend "<strong>Software Princess</strong>">> (Software Engineer)<</linkappend>>: Maggie Oates
''Graphic Designer & Videographer:'' <a href="http://goofytoof.com/">Goofy Toof</a>
''Sound Designer'': <a href="http://adriennecassel.com/">Adrienne Cassel</a> <a href="https://www.instagram.com/l.i.lith/">(insta)</a>
''Image and Story Contributors:''
<a href="https://www.twitter.com/amalaxazul">Amala Azul</a>
<a href="https://www.instagram.com/light.fae">Fae Brite</a>
<a href="https://www.instagram.com/___hellbait___">Hellbait</a>
<a href="https://www.instagram.com/_Glitchthemme">.P. (Themme)</a>
<a href="https://twitter.com/LyncJohnson">Lync Johnson</a>
Quin
<a href="https://www.instagram.com/not.your.e.girl/">Karren</a>
<a href="https://www.twitter.com/missharleykinz">Nimina Harley</a>
<a href="https://twitter.com/mac_thigh/">Stonerdomme</a>
Thank you to all the sex workers, artists, and activists who continue to work, create, and agitate online and offline. You are our heroes, and we made OnlyBans for and with you.
<h2>ACKOWLEDGEMENTS</h2>
Thank you to all our contributors who have been brave enough to share their real stories and photos. Your generosity and trust has been a gift.
Thank you to """Hacking//Hustling""". We are indebted to your research, in particular the report, <a href="https://hackinghustling.org/posting-into-the-void-content-moderation/">"Posting Into The Void"</a>, from which we drew many of our statistics on shadowbanning and deplatforming. You have been an invaluable resource to those fighting on the digital frontlines.
Thank you Lien Tran, the creator of <a href="http://copsandrubbers.com/">"Cops & Rubbers"</a>, which was hugely inspirational as we considered how to design a game that could also compel real-world policy change.
We also thank Polis 180 and Violeta Mezeklieva, with whom Lena conceptualized an early version of OnlyBans. Thank you to Kelly Strayhorn Theater for supporting the project’s visual development and narrative expansion during the Freshworks residency. This work was also supported by the UC Berkeley Center for Long-Term Cybersecurity, the Carnegie Mellon School of Art, and Science Gallery Detroit.
/* GLOBAL STORY VARIABLES */
<<set $income to 1>>
<<set $incomePerFan to 10>>
<<set $incomeTarget to 200>>
<<set $numPhotosFlagged to 0>>
<<set $numFans to 0>>
<<set $flagLimit to 3>>
<<set $wasSuspended to false>>
<<set $outingRisk to 1>>
<<set $outingLimit to 3>>
<<set $joinedGroup to false>>
<<set $playerName to '@QTPieslice'>>
<<set $usedRealName to false>>
<<set $numWeek to 0>>
<<set $weekLimit to 6>>
<<set $outingPreludeWeek to 3>>
<<set $suspensionWeek to 4>>
<<set $outingWeek to 5>>
<<set $hasVerifiedName to false>>
<<set $hasVerifiedAddress to false>>
<<set $hasVerifiedID to false>>
<<set $currentPhoto to "default">>
<<set $numPhotosQueued to 9>>
/* SOUND */
<<masteraudio muteonhide>> /* mute audio when tab is in background */
<<cacheaudio "ambient" "audio/ambient.mp3">>
<<cacheaudio "dark" "audio/dark.mp3">>
<<cacheaudio "outsideclub" "audio/outsideclub.mp3">>
<<cacheaudio "sexi" "audio/sexi.mp3">>
<<cacheaudio "glitch" "audio/glitch.mp3">>
<<cacheaudio "cashregister" "audio/cashregister.mp3">>
<<cacheaudio "bad" "audio/bad.mp3">>
<<cacheaudio "notification" "audio/notification.mp3">>
<<cacheaudio "click" "audio/click.mp3">>
<<cacheaudio "neutral" "audio/neutral.mp3">>
<<createaudiogroup ":soundeffects">>
<<track "glitch">>
<<track "cashregister">>
<<track "bad">>
<<track "notification">>
<<track "click">>
<<track "neutral">>
<</createaudiogroup>>
<<set $bgmusicgroupID to ":bgmusic">>
<<createaudiogroup $bgmusicgroupID>>
<<track "ambient">>
<<track "dark">>
<<track "outsideclub">>
<<track "sexi">>
<</createaudiogroup>>
<<audio $bgmusicgroupID volume 0>>
<<set $audioTagMap to {
"music-ambient" : "ambient",
"music-dark" : "dark",
"music-outsideclub" : "outsideclub",
"music-sexi" : "sexi",
}>>
/* PHOTOS */
/* Outcome/reward distributions for the different photo risks.
These should add to 100. */
<<set $riskDists to {
"low": {
"tooSexyBan": 0,
"noReasonBan": 20,
"shadowBan": 10,
"newFans": 70,
},
"medium" : {
"tooSexyBan": 16,
"noReasonBan": 17,
"shadowBan": 17,
"newFans": 50,
},
"high" : {
"tooSexyBan": 35,
"noReasonBan": 1,
"shadowBan": 34,
"newFans": 30,
}
}>>
/* The number of fans you get for the risk you take. Integer range. */
<<set $fanRewardDists to {
"low" : [1, 2],
"medium" : [2, 4],
"high" : [3, 6],
} >>
<<set $photoPool to {
"default" : new Photo(),
"jp" : new Photo("jp",
"1_JP",
"high",
"A person with medium dark skin, buzzed hair, and a mustache. The person is kneeling in an orange fishnet body stocking and a matching banana hammock. Nipples are faintly visible.",
"J.P. (Themme)",
"I'm a trans diasporic person by way of the Dominican Republic. These pictures were flagged on Instagram, and I'm currently on probation, with my account near deletion."),
"quin" : new Photo("quin",
"3_Quin",
"medium",
"A light-skinned, tattooed, thin person lies chest-down on a cushion with their butt lifted slightly into the air. They are wearing strong eyelines, a nose ring, and pink thong bodysuit lingerie with a few bows. No nipples or genitals are in view.",
"Quin",
"I'm a gay, non-binary, Latinx sex worker. I’ve been working for 9 years and have been flagged so many times that I can't keep count. My personal account of 10 years was taken away from me."
),
"stonerdomme" : new Photo("stonerdomme",
"4_Stonerdomme",
"medium",
"Stonerdomme holds two peace signs up to the camera with their legs spread. Dressed in yellow lingerie, Stonerdomme is a Black person with pink and purple-dyed natural hair, big curves, and a knowing smirk.",
"Stonerdomme",
"I'm Black, pansexual, and non-binary. This image was used against me in a Twitter debate. Someone reported my content and they banned me."
),
"fae" : new Photo("fae",
"12_Fae",
"low",
"A person with tight curly hair, glasses, and dark lipstick gazes listlessly at the camera. They are wearing a leather chest harness and fishnet tights. Their arms cover most of their flat chest, but the faint outline of a nipple is visible.",
"Fae Brite",
"I'm AMAB (assigned male at birth) and non-binary so it's frustrating to have my body policed in a way where the more feminine I look, the more incriminating it is and thus more of a liability."
),
"amala" : new Photo("amala",
"5_Amala",
"low",
"Amala Azul leans shirtless toward the camera with one hand covering both breasts. Amala is Black and wear a checkered skirt, hoop earrings, a head scarf, and fantastic eyebrows. No nipples are showing.",
"Amala Azul",
"I'm a Black, queer, non-binary, and disabled sex worker. This photo was deleted for violating community guidelines, and I was threatened with account deletion if I continued. I no longer promote on Instagram due to the immense censorship and whorephobia."
),
"nimina" : new Photo("nimina",
"6_Nimina",
"low",
"A medium-skinned, large person with a bright green wig winks and holds two peace signs up. They are wearing a sleeveless velvety pink top with the word Angel, glasses, impeccable stilleto nails, dimple piercings, and a studded leather collar. There is a small amount of cleavage visible.",
"Nimina Harley",
"This image was deleted only minutes after uploading, and I am fully dressed. I’m queer and a person of color."
),
"hellbait" : new Photo("hellbait",
"11_Hellbait",
"medium",
"A Vietnamese person with long hair holds two butt plugs to their head like alien antennae. A yellow tellytubby toy sits on their lap. They are shirtless, but their hair fully covers their breasts. Their mouth is held open with a hook gag, tongue out.",
"Hellbait",
"I'm Vietnamese and queer. My image was removed for 'sexual activity' on Instagram. For the next two weeks, I did not show up in search results or on my followers' feeds at all."
),
"karren" : new Photo("karren",
"9_Karren1",
"high",
"A shiftless woman slides one hand under sheer tights into her crotch. She is thin, has light skin, dark hair, and a perfect manicure. The portion of her face above the lips has been cropped off.",
"Karren",
"I am an erotic artist in the Philippines using photography and collage to express myself. Censorship on almost all platforms has made it difficult for me to pursue my art."
),
"karren2" : new Photo("karren2",
"10_Karren2",
"high",
"A thin, light-skinned woman stands angled slightly away from the camera. She is shirtless with dark brief underwear. One nipple is visible.",
"Karren",
"I am an erotic artist in the Philippines using photography and collage to express myself. Censorship on almost all platforms has made it difficult for me to pursue my art."
),
"lync2" : new Photo("lync2",
"8_Lync2",
"high",
"A thin, muscular Black man stares into the camera. One hand lifts up his shirt above his nipple. The other hand reaches down into his pants, revealing the edge of public hair.",
"Lync Johnson",
"This image was deleted by Instagram. I had to crop or edit the photo in order to successfully repost it."
),
"lync" : new Photo("lync",
"7_Lync1",
"high",
"A naked, thin, muscular Black man stares into the camera. The image is cropped at the edge of his groin, revealing the faintest suggestion of genitals. Both nipples are visible. A water mark says RoyMayh.",
"Lync Johnson",
"This image was deleted by Instagram. I had to crop or edit the photo in order to successfully repost it."
),
}>>
<<set $availablePhotos to clone(Object.keys($photoPool))>>
<<run $availablePhotos.delete("default") >>
<<silently>>[[dummy->motivation]]<</silently>><<backgroundvideo "makeup">><</backgroundvideo>><<browserwindow "" "browser-blue-white">>
<<type 60ms>>Welcome, $playerName.<</type>>
Did you select your <<link "real name" "motivation">><<set $usedRealName to true>><</link>> or
a <<link "fake name" "motivation">><<set $usedRealName to false>><</link>>?
<</browserwindow>><<backgroundvideo "empty-wallet">><</backgroundvideo>><<browserwindow "GOALS" "browser-blue-white">>
You're hoping to earn $<<print "$incomeTarget">> to pay your gas and water bills in $weekLimit weeks. Every fan you get earns you $<<print "$incomePerFan">>. If you're lucky, some of them may even tip you extra! 😘
<<link "Let's get fans!" start-week>><<audio "glitch" play>><</link>>
<</browserwindow>><<silently>>
<<set $numWeek to visited()>>
<<set _toGo = Math.clamp($incomeTarget - $income, 0, $incomeTarget + $income) >>
[[dummy->photo-selection]]
[dummy->suspension-side-story]]
[[dummy->outing-side-story]]
[[dummy->money-ending]]
<<set _videoList to ['camming1', 'camming2', 'camming3', 'camming4']>>
<<set _i to visited() % _videoList.length>>
<</silently>><<backgroundvideo _videoList[_i]>><</backgroundvideo>>
<h2>Week $numWeek</h2>
You have $<<print "$income">> in your pocket and $<<print _toGo>> to go!
<<switch visited()>>
<<case $suspensionWeek>>
[[You go to post a new photo and see a weird notification.->suspension-side-story]]
<<case $outingPreludeWeek>>
<<linkreplace "Log in to post a new photo.">>
Weird...the button to post photos is disabled. [[Check your notifications->outing-prelude]].
<</linkreplace>>
<<case $outingWeek>>
A new message pops up! [[Open the message.->outing-side-story]]
<<case $weekLimit>>
<<goto [[money-ending]]>>
<<default>>
<<set _line to ["Time to set some thirst traps.", "You get out the selfie stick and start snapping away.", "You love the camera and the camera loves you"].pluck()>>
<<link _line "photo-selection">><<audio "neutral" play>><</link>>
<</switch>>
<<silently>>
<<set _outingBranch to either("stolen-content", "personal-data", "suggested-friends")>>
<<set _outingEquiv to (_outingBranch == "stolen-content")>>
<</silently>><<if _outingBranch == "stolen-content">>
The text is from an old friend you haven't talked to in years.
<<browserwindow "sms" "browser-blue-white">>Hey $playerName. This is kind of awkward, but I just wanted to reach out and let you know I stumbled on this pic of you on PornHubba...
<</browserwindow>>
The pic is yours, but you didn't post it on PornHubba. Oh, hell no!
Someone is stealing and reposting your content!
Do you want to [[ask other sex workers for advice->stolen-content]] or [[ignore it->photo-selection]]?
<<elseif _outingBranch == "personal-data">>
Shooting and posting content is hard work, but what nobody told you about was all the invisible effort of chatting with fans. Like working in a coffee shop, you start to get regular customers who tip you again and again. And then there are some people who are just there for freebies or who are just plain rude.
There's yet another [[fan message to deal with.->personal-data]]
<<elseif _outingBranch == "suggested-friends">>
OnlyBans sent you a list of suggested followers. You think you recognize one of the people? [[Take a closer look.->suggested-friends]]
<<else>>
Your friend asks you to feed their cat (again). [[Get back to making content.->photo-selection]]
<</if>><<silently>>
<<set $wasSuspended to true>>
<<audio "bad" play>>
<</silently>><<browserwindow "too-sus.cry" "browser-black-gray">> <h2>SUSPENDED!</h2>
OnlyBans is watching you. Based on your previous activity, your account has been temporarily blocked from taking this action. This block expires in one week.
We restrict certain content to protect our community. If you continue to post dangerous content, you may be banned permanently.
<</browserwindow>>
[[Continue.->suspension-consequence]]
<<browserwindow "locked" "browser-blue-white">>
<h2>LOCKED</h2>
We've temporarily limited some of your account features. In order to make sure OnlyBans is as safe as possible, you may be asked to confirm you're not a robot. Easy, right?
For full access, please verify your phone number.
<<textbox "_fakePhone" "777-7777" "verify-more" autofocus>>
[[Submit.->verify-more]]
[[Skip verification.->skip-verify-phone]]
<</browserwindow>>Time's up! Your $<<print $incomeTarget>> is due.
<<linkreplace "Count your money">><<set _hasEnoughMoney to $income > $incomeTarget>><<type 40ms>>You have $<<print $income>>.<</type>>
<<if _hasEnoughMoney>><<include "got-money-ending">>
<<else>><<include "not-enough-money-ending">><</if>>
So, how to best tell this story? Hmm ... maybe you need to [[put them in your shoes ->ending]]😈
<</linkreplace>><<silently>>
<<run $availablePhotos.shuffle()>>
[[dummy->newFans]]
[[dummy->noReasonBan]]
[[dummy->shadowBan]]
[[dummy->tooSexyBan]]
<</silently>>
<<browserwindow "MY PHOTOS" "browser-lightpink-white">>
Which photo do you want to post today?
<<photogrid $availablePhotos>>
<</browserwindow>><<silently>>
<<set _newFansRange to $fanRewardDists[$photoPool[$currentPhoto].riskLevel] >>
<<set _numNewFans to random(_newFansRange[0], _newFansRange[1])>>
<<addfans _numNewFans>>
<<audio "neutral" play>>
<</silently>><<backgroundvideo "boots">><</backgroundvideo>>Your photo got some attention and attracted _numNewFans new fans!
Yay, you’re getting the hang of this! [[What else could you do->community-support]] to boost your fan count?<<silently>>
<<set $numPhotosFlagged += 1>>
<<audio "bad" play>>
<</silently>>
<<browserwindow "FLAGGED" "browser-black-black">><h2>FLAGGED!</h2>
Your photo is <strong>too</strong> sexy. It’s been taken down. If you post something that goes against our guidelines again, your account may be deleted.
You’ve made no new fans and earned no new money.
[[Continue->too-sexy-real-story]]
<</browserwindow>><<silently>>
<<set $numPhotosFlagged += 1>>
<<audio "bad" play>>
<</silently>>
<<browserwindow "areuthere.txt" "browser-pink-pink">><h2>SHADOWBANNED?</h2>
Your photo was posted but there are barely any likes or comments. 🤔
A shadowban means that a user can continue posting as normal, but their posts will be hidden from the rest of the community.
<</browserwindow>>
Sorry, no new fans. No new money.
[["Ugh, why?"->shadowBan-real-story]]
<<silently>>
<<set $numPhotosFlagged += 1>>
<<audio "bad" play>>
<</silently>>
<<browserwindow "f l a g g e d" "browser-black-black">><h2>FLAGGED!</h2>
The algorithm flagged your content even though you followed all the guidelines! If you get flagged again, your account may be deleted.
<</browserwindow>>
Sorry, no new fans.
[[Continue->noReason-real-story]] <<silently>>
<!-- dummy utility links for the Twine editor map --!>
[[share4share->share4share]]
[[joinGroup->joinGroup]]
[[tip->tip]]
[[attendWorkshop->attendWorkshop]]
<<set $communityOutcome to 'tip'>>
<<set $communityOutcomes to ["share4share", "attendWorkshop", "joinGroup", "tip", "tip", "joinGroup"]>>
<<switch visited()>>
<<case $suspensionWeek>> /* since they can't accept tips, send them to the outcome that has no tips */
<<set $communityOutcome to 'attendWorkshop'>>
<<case 1>>
<<set $communityOutcome to 'share4share'>>
<<case 2>>
<<set $communityOutcome to 'tip'>>
<<case 3>>
<<set $communityOutcome to 'joinGroup'>>
<<case 4>>
<<set $communityOutcome to 'attendWorkshop'>>
<<default>>
/* all other weeks, get a tip. */
<<set $communityOutcome to 'tip'>>
<</switch>>
<<goto $communityOutcome>>
<</silently>>[[logic error ->tip]]
<<silently>>
<</silently>><<backgroundvideo "stress-nails">><</backgroundvideo>>
You're locked out of OnlyBans for the rest of the week. You can't gain new followers and or accept new money.
But hey, [[others have been through this before->community-support]]. Maybe your luck will improve?
<<backgroundvideo "stress-temples">><</backgroundvideo>>
Another banned photo? That's $numPhotosFlagged banned photos //and// you were recently suspended?
[[Oh shit...->permabanned]]<<silently>>
<<audio "bad" play>>
<</silently>>
<<browserwindow "oh-no.exe" "browser-black-gray">><h2>DEACTIVATED</h2>
You've violated the rules one too many times. Your account has been permanently disabled.
[[CONTINUE->permabanned-real-story]].
<</browserwindow>><<browserwindow "not-alone.exe" "browser-pink-black">>
41.01% of those who have done sex work said they have been deplatformed or kicked off of a social media account.
[[CONTINUE.->permabanned-appeal]]
<</browserwindow>>
<<silently>>
<<set _hasAppealSuccess to either(true, false)>>
<</silently>><<backgroundvideo "help-scrolling">><</backgroundvideo>>
You ask a stripper you follow who lost an account with over 10k followers. They tell you that you can try to get your account back by submitting a support request, but the odds are against you.
What do you do?
<span id='giveup'><<linkreplace "Give up your account.">><<remove "#contest">>
Even if you tried to fight it, 93% of sex workers who have been deplatformed do not get their accounts back. You’ve become another casualty of the social media war against sex workers.
You [[take a moment to reflect ->permabanned-ending]] on everything that's gone down.
<</linkreplace>>
</span><span id='contest'><<linkreplace "Contest the decision.">><<remove "#giveup">><<if not _hasAppealSuccess>>
You lose. 93% of sex workers who have been deplatformed do not get their accounts back. You’ve become another casualty of the social media war against sex workers.
You [[take a moment to reflect->permabanned-ending]] on everything that's gone down.<<else>>
Your account has been reactivated! Consider yourself in the lucky 7% of sex workers who successfully regain access after being deplatformed.
[[Continue with your week.->community-support]]
<</if>>
<</linkreplace>></span>On your journey, you’ve learned a lot about digital freedom and privacy. Most importantly, you made friends along the way and realized the power of community!
Social media is obviously rigged against sex workers. You want to reach your dreams AND ensure that the Internet remains a free and sexy place. Luckily, sex workers have always been creative and entrepreneurial. If the platforms don’t serve you, it’s time to make your own.
But you also want to give the platforms the chance to change. Even though it’s scary, you and your sex worker friends decide that sharing your story is the first step to educating the public and asking for accountability from tech companies, who have the power the change these harmful policies. After all, these companies are made of real people who work there by day and wank to your content by night.
So, how to best tell this story? Hmm ... maybe you need to [[put them in your shoes->ending]] 😈
<<backgroundvideo "ending-boots">><</backgroundvideo>><<browserwindow "the-end.exe" "browser-pink-pink">>Thank you for playing OnlyBans
Based on research by <a href="https://hackinghustling.org/posting-into-the-void-content-moderation/">"""Hacking//Hustling"""</a>.
More info in the [[Credits->Credits]] and [[About->About]] pages.
<<link "<div style='font-size:2em'>Play again?</div>">><<script>>UI.restart();<</script>><</link>>
<em>(Things are a little different each time.)</em>
<</browserwindow>><<browserwindow "STILL LOCKED" "browser-black-gray">>
Thank you for verifying your phone number.
For somewhat vague safety reasons, we still need more information before you can cash out any money from your account.
<div style="text-align:left">
<label><<checkbox "$hasVerifiedName" false true>> Add your legal name.</label>
<label><<checkbox "$hasVerifiedAddress" false true>> Add a personal email.</label>
<label><<checkbox "$hasVerifiedID" false true>> Upload a photo of yourself holding your state ID.</label></div>
<<linkreplace "Submit">>
<<if $hasVerifiedName and $hasVerifiedAddress and $hasVerifiedID>>Verified!
Finally! You're not thrilled about all the personal info you just gave away, but at least now you can [[get back to posting.->photo-selection]]
<<else>>
<<goto "skip-verify-more">>
<</if>>
<</linkreplace>>
<</browserwindow>><<silently>>
<<audio "glitch" play>>
<</silently>><<browserwindow "" "browser-black-gray">>
You won't be able to withdraw money from OnlyBans until you give them all the personal information demanded. What's the point of making this content if you can't even get paid?
[[Verify your number.->outing-prelude]]<</browserwindow>><<browserwindow "" "browser-black-gray">>
You won't be able to withdraw money from OnlyBans until you give them all the personal information demanded. What's the point of making content if you can't even get paid?
[[Verify the rest.->verify-more]]
Give up and [[close your account->close-account]]
<</browserwindow>>Unfortunately, stigma and shame means that most sex workers use pseudonymns and hide their job from their employers and loved ones. Even though you’re not willing to risk being outed, you’ve learned a lot about digital freedom and privacy during your time on OnlyBans. Most importantly, you made friends along the way and realized the power of community!
But you also want to give the platforms another chance. Even though it’s scary, you and your sex worker friends decide that sharing your story is the first step to educating the public and asking for accountability from tech companies, who have the power the change these harmful policies. After all, these companies are made of real people who work there by day and wank to your content by night.
So, how to best tell this story? Hmm ... maybe you need to [[put them in your shoes->ending]] 😈
<<silently>>
<<set _getsTakenDown to either(true, false)>>
<<set _bgVideoSource to "images/mannequin1.mp4">>
<<set _bgVideo to '<video autoplay loop muted id="bgvid"><source type="video/mp4" src='+_bgVideoSource+'></video>'>>
<</silently>>
<<backgroundvideo "mannequin1">><</backgroundvideo>>
<<browserwindow "IRL.txt" "browser-blue-white">>
"It turns out that 45% of sex workers have had their images or content used for a fake account (e.g., catfishing)."
<</browserwindow>>
You're pissed that someone could be impersonating you and providing false information or even profiting from your content. They're going DOWN.
<<linkreplace "Report the account.">>
You submit a help request, but a few days later the fake account is still up.
<<linkreplace "<span id='help'>Find some help.</span>">>
You ask your sex worker support group to <<linkappend "report the account">>
<<if _getsTakenDown>>
The copycat gets taken down. Close call!
Only 41% of sex workers have had success in getting fake accounts taken down.
Thank goodness! 🙏 Now you can [[get back to it->photo-selection]].
<<else>>
The account stays up. It makes you nervous to not have control over your content, but this is a common problem. 59% of sex workers don’t manage to get copycat accounts shut down. What can you do?
[[Shut down your account before more content is stolen->close-account]].
<span id="giveup">Cut your losses and [[continue posting.->photo-selection]]</span>
<</if>>
<</linkappend>>
<</linkreplace>>
<</linkreplace>><<backgroundvideo "mannequin3">><</backgroundvideo>>
<<linkreplace "<<browserwindow '💌 FAN MAIL 💌' 'browser-blue-white'>>Open Message<</browserwindow>>">>
<<browserwindow 'FAN MAIL' 'browser-blue-white'>><em><<type 40ms>>Hey, this is weird, but don't I know you from somehwere? -Jean<</type>></em><</browserwindow>>
Your old boss started following your OnlyBans account? How did they find you? It's not like your account is very popular yet...
<<if $usedRealName>>
When you opened your account, you picked a real name. Maybe your boss searched your name and found your page?
<<else>>
Did you use verify your account with the same phone number you used for social media? These platforms often sell or share data around with each other, so using the same contact information can lead to your sex work account being recommended to people you may know in real life. (The Algorithm is creepy!)
Now that one person knows you're doing sex work, others might find out too. Do you want to keep posting on OnlyBans?
<</if>>
[[Yes, take your chances and continue posting.->photo-selection]]
No way. [[Close your account.->close-account]]
<</linkreplace>>
<<silently>>
<<set _people to ["mom","favorite teacher","child","landlord", "godparent"]>>
<</silently>><<backgroundvideo "mannequin2">><</backgroundvideo>>
The list of people you should follow includes tons of friends and … even your devoutly religious neighbor. Super creepy! You haven’t told anyone that you’re a sex worker or that you have this account. Are they being asked to follow you too? You need the money, but is it worth being outed?
<span id='yes'><<linkreplace "Yes.">><<remove "#no">>
You'll take the risk of having an uncomfortable conversation. After all, you need the money and the clock is ticking.
<<browserwindow "" "browser-white-blue">>You imagine telling your @@font-size:1.2em;<<cycle "_person" autoselect>><<optionsfrom _people>><</cycle>>@@ about your account. What would you say?
<<textarea "$toldSomeone" "">>
<</browserwindow>>
It's terrifying, but [[you tell them->photo-selection]].
Nevermind, <<linkreplace "it's too painful.">>you [[quit OnlyBans->close-account]]. You need the money but don't want to live in fear of getting outed.<</linkreplace>>
<</linkreplace>></span>
<span id='no'><<linkreplace "Nope.">><<remove '#yes'>>You contact the platform's customer support team asking to opt out of the friend algorithm, but they won't help. You [[quit OnlyBans->close-account]]. You need the money but don't want to live in fear of getting outed.<</linkreplace>></span><<backgroundvideo "pizza">><</backgroundvideo>>
Congratulations, your booty beat the odds! You reached your goal, learned a lot about digital freedom and privacy. Most importantly, you made friends along the way and realized the power of community!
You were one of the lucky ones. Social media is obviously rigged against sex workers. You want to reach your dreams AND ensure that the Internet remains a free and sexy place. Luckily, sex workers have always been creative and entrepreneurial. If the platforms don’t serve you, it’s time to make your own!
But you also want to give the platforms the chance to change. Even though it’s scary, you and your sex worker friends decide that sharing your story is the first step to educating the public and asking for accountability from tech companies, who have the power the change these harmful policies. After all, these companies are made of real people who work there by day and wank to your content by night.Too bad, you didn’t reach your goal … but you did learn a lot about digital freedom and privacy. Most importantly, you made friends along the way and realized the power of community!
Social media is obviously rigged against sex workers. You want to reach your dreams AND ensure that the Internet remains a free and sexy place. Luckily, sex workers have always been creative and entrepreneurial. If the platforms don’t serve you, it’s time to make your own!
But you also want to give the platforms the chance to change. Even though it’s scary, you and your sex worker friends decide that sharing your story is the first step to educating the public and asking for accountability from tech companies, who have the power the change these harmful policies. After all, these companies are made of real people who work there by day and wank to your content by night.
<<back "Back to game.">>
<<browserwindow "" "browser-lightpink-lightpink">><h2> Home Page </h2>This game lives at <a href="https://www.onlybansgame.com">www.onlybansgame.com</a>.
<h2> About the game </h2>Created by a team of sex workers and allies, Created by a team of sex workers and allies, OnlyBans is an interactive game that critically examines the policing of marginalized bodies and sexual labor to empathetically teach people about discrimination faced by sex workers online. Players encounter content moderation algorithms, shadowbanning, "real name" policies, facial recognition software, and other threats based on actual experiences of sex workers. Based on research by <a href="https://hackinghustling.org/posting-into-the-void-content-moderation/">"""Hacking//Hustling"""</a> and featuring real images and stories from sex workers themselves, OnlyBans offers a speculative vision of how marginalized communities can unite to protest these unjust policies and create better alternatives.
This game is still a living document, a work-in-progress. We welcome <a href="https://www.onlybansgame.com/feedback">feedback</a>!
<</browserwindow>>
<<browserwindow "" "browser-lightpink-white">>
<h2>More Resources</h2>
OnlyBans is a journey into a world of increasing censorship, restrictive content policy changes, and user account shutdowns. It is the world we are living in today, as platforms such as YouTube, Instagram, Craigslist, Reddit, and Tumblr, adopt an umbrella ban on “adult content”, which has not only impacted sex workers, but also artists, activists, and Internet users of all backgrounds.
Digital discrimination and deplatforming of sex workers is a direct result of FOSTA-SESTA, a federal bill Congress passed in 2018 to hold Internet service providers responsible for third-party advertisements of sexual services posted on their platform. Organizations, such as American Civil Liberties Union and Electronic Frontier Foundation, have warned that the bill threatens free speech and endangers sex workers by leaving them without access to client screening protocols or community resources. The solution is to amplify the work of sex worker-led organizations and coalitions that work to improve the safety of sex workers’ online spaces and working conditions.
<a href="https://hackinghustling.org/">"""Hacking//Hustling""">></a> is a collective of sex workers, survivors, and accomplices working at the intersection of tech and social justice to interrupt state surveillance and violence facilitated by technology. Created in response to the imposed threat of FOSTA-SESTA, their work takes a harm reduction approach that includes community-based research, mutual aid, organizing, art, and any/all tools sex workers and survivors develop to mitigate state, workplace, and interpersonal violence and thrive.
<a href="https://stopsesta.org/">Stop SESTA/FOSTA</a>. FOSTA-SESTA is opposed by a broad coalition of internet freedom, human rights, and sex worker advocates and organizations. The Stop SESTA + FOSTA coalition website provides information about the bill and a script to read to your Senator.
<a href="https://survivorsagainstsesta.org/">Survivors Against SESTA</a> is a “coalition of current and former sex workers, people who have experienced exploitation and trafficking, dancers, hustlers, allies, partners, family members and community members.”
<a href= "https://decodingstigma.tech/">Decoding Stigma</a> bridges the gap between sex workers, academics, technologists, and anyone who holds multiples of these identities. Their goal is to prioritize sexual autonomy as a necessary ethics question for researchers and technologists and to design a liberatory future in which sexually stigmatized voices are amplified and celebrated.
<</browserwindow>>
<<back "Back to game.">>
Goal: Get $<<print $incomeTarget>> by week $weekLimit
Wallet: $<<print $income>>
Week: $numWeek<<silently>>
<<set _numNewFans to 2>>
<<audio "notification" play>>
<</silently>><<backgroundvideo "help-hands">><</backgroundvideo>><<nobr>><section class="section"><div class="from-them loud"><p><<type 40ms>>Hey $playerName, cool account! I’m also selling pics on OnlyBans. Do you wanna do a share4share?<</type>></p></div>
<div class="clear"></div>
<<linkreplace "What's a share4share?">><div class="from-me loud"><p><<type 40ms>>What’s a share4share?<</type>></p></div><div class="clear"></div>
<<type 40ms start 1s>><div class="from-them loud"><p>I’ll share your content with my followers, if you do the same for me. It’s a way to build a bigger fanbase!</p></div><</type>>
<div class="clear"></div>
<<linkreplace "<<type 0ms start 0.75s>><span id='yes'>Sure, let's share!</span><</type>>">>
<<silently>>
<<remove "#no">>
<<addfans _numNewFans>>
<<audio "cashregister" play>>
<</silently>>
<div class="clear"></div>
<<type 40ms>><div class="from-me loud"><p>Sure, let's share!</p></div><</type>>
<div class="clear"></div>
They share your pics to their feed. You attract _numNewFans new fans and make some more money.
Wallet: $<<print $income>>
<</linkreplace>>
<<linkreplace "<<type 0ms start 0.75s>><br><span id='no'>Nah.</span><</type>>">><<remove "#yes">><div class="from-me loud"><p><<type 40ms>>Nah, sorry.<</type>></p></div><div class="clear"></div>
<div class="from-them loud"><p><<type 40ms start 1s>>Okay, suit yourself.<</type>></p></div><div class="clear"></div>
<</linkreplace>>
<</linkreplace>>
</section><</nobr>>
[[Continue to your next week.->start-week]]<<silently>>
<<set _tip to random(10,100)>>
<<set _intro to either(
"You wake up with a headache, but you still need to make money. Instead of shooting something new, you post a photo you took last week. One of the perks of the job is that you don’t have to argue with a boss for time off when you’re feeling sick.",
"Scrolling through your message history with your ex, you find a pic you sent when you two were sexting. Hmm … the relationship might be over, but the relics don’t have to go to waste. You repurpose the photo by sharing it with your followers."
)>>
<<set _message to either("Can you keep me warm? 🔥😘",
"🔥What a beautiful sexy perfect body 🔥",
"Sweet meat baby ❤️",
"Take it all off!!!!!!!",
"I love your toes",
"Damn baby you're so beautiful and very very sexy!!! 🔥🔥🔥👅👅👅😈",
"you are wonderful my princess🔥👅",
"I would `*`*`*`* you till I faint !!!",
"🍒💜🌹bonita🐰babygirl🌹💜🍒",
"Gorgeous and sexy, I so want you babe 🔥🔥🔥👿👿👿😍😘",
"You poor child, have you no clothes to wear??",
)>>
<<audio "notification" play>>
<</silently>><<backgroundvideo "help-scrolling">><</backgroundvideo>>_intro
<<browserwindow "💌 FAN MAIL 💌" "browser-white-blue">>
<<linkreplace "Open fan mail!">><<silently>>
<<audio "cashregister" play>>
<<set $income += _tip>><</silently>><<type 40ms>>_message
Tip: $<<print _tip>><</type>>
You've earned a tip! The wallet's at $<<print $income>>.
<</linkreplace>>
<</browserwindow>>
Wow, the week is already over? [[Time flies->start-week]] when you're getting tips.<<silently>>
<<set $outingRisk to $outingRisk - 2>>
<<set _activism to ['Black Lives Matter','Me Too','the Landback movement','abortion','the disability community','climate change']>>
<<set _lesson to ["attendWorkshop-activism", "attendWorkshop-reverseimage", "attendWorkshop-gender"].pluck()>>
<</silently>><span id="intro">
You see this post on your timeline...
<div id="workshop-banner" class="workshop-banner"><h2>Workshop: Digital Harm Reduction For Sex Workers</h2>Attend our workshop for tips on avoiding censors, stalkers, and impersonators!
Thursday at 3pm.</div>
</span>
<<linkreplace "<span id='yes'>Check it out.</span>">><<remove "#no">><<remove "#intro">><<backgroundvideo "help-selfies">><</backgroundvideo>><<include _lesson>> Plus, there's pizza. <<linkappend "Grab a slice ">> (a little stale, but still delicious) <</linkappend>> on <<link "your way out." "start-week">><<audio "neutral" play>><</link>>
<</linkreplace>><span id='no'>
It looks cool, but your time and energy are precious. [[Make some more content.->start-week]]</span>
<<browserwindow "music-is-gonna-start-put-in-headphones.exe" "browser-lightpink-lightpink">>!OnlyBans
Take a moment to find <<link "the sidebar">><<script>>
if(UIBar.isStowed()){UIBar.unstow();}else{UIBar.stow();}
<</script>><</link>>, change settings, and...<div style="font-size:2em">[[Enter.->opening-screen]]</div>
<</browserwindow>><<silently>>
[[dummy->permaban-transition]]
<<set _currentStat to either(
"42% of sex workers said they have received a warning that their social media account is close to deletion.",
"67% of sex workers have had a post removed from social media.",
"Plus-size users' accounts are flagged for excessive nudity and sexual solicitation more frequently than thin users’ accounts. Women of color and queer people experience platform punishment and policing more frequently than their white, cishetero counterparts." )>>
<</silently>>
<<browserwindow "IRL.txt" "browser-pink-black">>
<div class="photo-container">
<div class="underlay"><<print $photoPool[$currentPhoto].toHTML("underlay")>></div>
<div class="overlay"><<print $photoPool[$currentPhoto].toVaporHTML("overlay")>></div>
</div>
<em>
<<print $photoPool[$currentPhoto].context >></em><<print " -"+$photoPool[$currentPhoto].model >>
_currentStat
<</browserwindow>>
<<if $wasSuspended>>
<<include "permaban-transition">>
<<else>>
You’re never going to reach your goal unless you develop some strategies to beat the algorithm. Maybe some [[other sex workers have advice...->community-support]]?
<</if>><<silently>>
[[dummy->permaban-transition]]
<<set _currentStat to either(
"77% of those who have done sex work avoid posting content for fear of being kicked off, shadowbanned, or facing legal action.",
"68% of those who have done sex work have had content that does not violate a sensitive media policy marked as sensitive media on their profile.",
"74% of those who have done sex work are noticing trends in the suppression of information on social media."
)>>
<</silently>>
This seems completely unfair, but you're not the first sex worker to have this problem...
<<browserwindow "IRL.exe" "browser-pink-black">>
_currentStat
<div class="photo-container">
<div class=""><<print $photoPool[$currentPhoto].toHTML("underlay")>> </div>
<div class=""><<print $photoPool[$currentPhoto].toVaporHTML("overlay")>></div>
</div>
<em><<print $photoPool[$currentPhoto].context >></em><<print " -"+$photoPool[$currentPhoto].model >>
<</browserwindow>>
<<if $wasSuspended>>
<<include "permaban-transition">>
<<else>>
Well, that sucks, but [[let's do some research?->community-support]]
<</if>><<silently>>
[[dummy->permaban-transition]]
<<set _currentStat to either(
'"We are reducing the spread of posts that are inappropriate but do not go against guidelines, limiting them from being recommended on our Explore and hashtag pages. For example, a sexually suggestive post will still appear in Feed if you follow the account that posts it, but this type of content may not appear for the broader community." –Instagram"',
'A shadowban ensures that content that platforms deem inappropriate, high-risk, or low value speech is invisible to other users, but still allows an account to remain on the platform in order to make ad revenue off of the shadowbanned individual.',
'You can get shadowbanned for following other sex workers. 73% of sex workers have experienced social media platforms suppressing their friends’ content from their timelines.',
'59% of sex workers have found their username does not show up in searches.',
'55% of those who have done sex work avoid specific words to avoid being shadowbanned. You can get shadowbanned for using banned phrases and hashtags like #asiangirl, #curvygirls, or #lesbian.'
)>>
<</silently>>
<<browserwindow "real-story.txt" "browser-pink-white">>
_currentStat
<div class="photo-container">
<div class=""><<print $photoPool[$currentPhoto].toHTML("underlay")>></div>
<div class=""><<print $photoPool[$currentPhoto].toVaporHTML("overlay")>></div>
</div>
<em> <<print $photoPool[$currentPhoto].context >></em><<print " -"+$photoPool[$currentPhoto].model >>
<</browserwindow>>
<<if $wasSuspended>>
<<include "permaban-transition">>
<<else>>
Ugh, sex work is harder than you thought. it's time to [[brush up on your business skills->community-support]].
<</if>><<silently>>
<<if $joinedGroup>>
<<goto "joinedGroup">>
[[dummy->joinedGroup]]
<</if>>
<</silently>><<backgroundvideo "help-hands2">><</backgroundvideo>>
You get a DM from a sex worker you follow...
<<nobr>><section class="chat-section">
<<type 40ms>><div class="from-them loud">
<p>Hi $playerName :) I’m a cam performer and think your pics are awesome!</p></div><</type>>
<div class="clear"></div>
<<type 40ms start 0.75s>><div class="from-me loud">
<p>Aww, thanks *blush*</p></div><</type>>
<div class="clear"></div>
<<type 40ms start 1.25s>><div class="from-them loud">
<p>Do you wanna join a private group chat with some other sex workers?</p></div><</type>>
<div class="clear"></div>
<<type 40ms start 1.75s>><div class="from-me loud">
<p>Hmm...maybe, what do you talk about?</p></div><</type>>
<div class="clear"></div>
<<type 40ms start 1.9s>><div class="from-them loud">
<p>All kinds of things: how to make more money, keep ourselves safe, and avoid getting banned!</p></div><</type>>
<div class="clear"></div>
<<type 0ms start 1.8s>>
<<linkreplace "<span id='yes'>Oh, that sounds like what I need, I’d love to join!</span>">><<remove "#no">>
<<type 40ms>><div class="from-me loud"><p>Oh, that sounds like what I need, I’d love to join!</p></div><</type>>
<div class="clear"></div>
<<type 40ms start 0.25s>><div class="from-them loud"><p>Sure, just click this <<link "invite link" "joinedGroup">>
<<set $joinedGroup to true>><</link>></p></div><</type>>
<</linkreplace>>
<div class="clear"></div>
<<linkreplace "<br><span id='no'>No thanks, I’m doing fine on my own.</span>">>
<<remove "#yes">><<type 40ms>><div class="from-me loud"><p>No thanks, I’m doing fine on my own.</p></div><</type>>
<div class="clear"></div>
<</linkreplace>><</type>>
</section>
<</nobr>>
[[Continue to your next week.->start-week]]<<silently>>
<<set _numNewFans to 2>>
<<switch [1,2].random()>>
<<case 1>>
<<set _greeting to "Welcome to the group $playerName!">>
<<set _topic to "how to disable location sharing when taking photos">>
<<set _lesson to "A photo’s <strong>EXIF data</strong> can expose the exact location of where you took a photo. So if you’re shooting pics at home, people can find out where you live!">>
<<set _reaction to "Wow, that’s creepy. I’ll definitely be careful with that.">>
<<case 2>>
<<set _greeting to "Heyyy $playerName! Where you been?">>
<<set _topic to "how to <strong>watermark your images</strong>">>
<<set _lesson to "You put a logo on your content, so impersonators can’t steal your pics and set up fake social media accounts with them.">>
<<set _reaction to "That sounds like great advice! Thanks for letting me know.">>
<<default>>
<<set _greeting to "oh hey!">>
<<set _topic to "cats">>
<<set _lesson to "It's not a euphamism lol. We're literally talking about our cats.">>
<<set _reaction to "Lol my bad! I'll get my mind out of the gutter.">>
<</switch>>
<</silently>>
<<nobr>><section class="chat-section">
<<type 40ms>><div class="from-them loud"><p>_greeting We were just talking about _topic.
</p></div><</type>>
<div class="clear"></div>
<<type 40ms start 0.5s>><div class="from-me loud"><p>What does that mean?</p></div><</type>>
<div class="clear"></div>
<<type 40ms start 0.75s>><div class="from-them loud"><p>_lesson</p></div><</type>>
<div class="clear"></div>
<<type 40ms start 1s>><div class="from-me loud"><p>_reaction</p></div><</type>>
<div class="clear"></div>
<<linkreplace "<<type 40ms start 1.1s>>Chat some more.<</type>>">><<addfans _numNewFans>>You set up some collaborations that eventually lead to 2 new fans! Wallet: $<<print $income>>.
<div class="clear"></div>
<</linkreplace>>
</section>
<</nobr>>
Stop chatting and [[continue to your next week.->start-week]]<<silently>>
<<set $gender to "Not Specified">>
<<set $genderOutcome to "Your follower count stays the same.">>
<</silently>>You learn from other sex workers that they've had more luck <strong>avoiding shadowbanning by identifying as 'male'</strong> on their profile.
Your profile doesn’t currently indicate a gender...Do you want to add one?
<<browserwindow "PICK YOUR <<linkreplace 'FIGHTER'>>GENDER<</linkreplace>>" "browser-pink-pink">><div id="gender-options" style="text-align:left">
<label><<radiobutton "$gender" "Male">>Male</label>
<label><<radiobutton "$gender" "Female">>Female</label>
<label><<radiobutton "$gender" "Not specified" autocheck>>Not specified</label>
<label><<radiobutton "$gender" "Custom">>Custom</label> <<textbox "$customGender" "">></div>
<<linkreplace "Submit">><<silently>>
<<switch $gender>>
<<case "Male">>
<<addfans 2>>
<<set $genderOutcome to "Your risk of shadowbanning decreased, so you gain 2 new fans over the course of the week.">>
<<case "Custom">>
<<set $gender to $customGender>>
<<set $genderOutcome to "Having an accurate gender on your profile feels affirming to many, but it can also give platforms more data about your gender group. For now, your follower count stays the same.">>
<<default>>
<<set $genderOutcome to "Your follower count stays the same.">>
<</switch>>
<<remove '#gender-options'>>
<</silently>>You selected <<print $gender>>. <<print $genderOutcome>><</linkreplace>>
<</browserwindow>>
You pick up some digital harm reduction tools that will come in handy to prevent your real identity from getting out.<<silently>><<set _activism to ['Black Lives Matter','#MeToo','the Landback movement','abortion','disability rights','climate change']>><</silently>>You overhear a conversation in the bathroom about how the same tactics used to repress sex workers online have also been used against activists, such as those posting about <<cycle '_cause' autoselect>><<optionsfrom _activism>><</cycle>>
Upsetting, but you're glad you learned about the risks of sharing "political" content.A cam performer there mentions that they posted the same cute bikini photo to their sex worker account and their personal account. One of their clients ran a <strong>reverse image search</strong> on their photo and found out their real identity. Apparently, it’s not just the algorithm that’s stalking you!
You pick up some digital harm reduction tools that will come in handy to prevent your real identity from getting out.