
Rorschach's Halloween Journal x Elevenlabs x Vercel
I walked NYC's parade as Rorschach, and strangers wrote in my journal.
Summary
Quick Facts
Solo Project by Shawki
My Role(s): Designer,Engineer,Performer
Tools Used: Elevenlabs (Voice Design + Text to speech API), Claude API, Vercel, GitHub, Claude as coding partner
Release: October 2026
Timeline: 72 hours

Description
This Halloween I wanted a costume the crowd could finish for me. Rorschach, the detective from Watchmen, famously carries a sign that says THE END IS NIGH. So I added a QR code to mine.
Scan it and you take an inkblot test. Tell the journal what you see, and it writes you a one-line noir roast, read aloud in a gravelly detective voice I designed in ElevenLabs. Every entry joins a public journal, and a speaker on my coat played the newest ones on a loop as I walked.
Objectives
Make a costume strangers could add to in under a minute
Design an original character voice instead of cloning an actor
Ask visitors for nothing personal: a first name, and no location
Build it, test it and wear it on Halloween within 72 hours
Challenges
72 hours from idea to parade, costume included
Weak cell signal in a packed Halloween crowd
Strangers typing anything they want into a public speaker
Making the voice sound like a detective, not a regular guy reading
My Approach
1. Designing a voice nobody has heard

I designed Rorschach's voice from a text prompt in ElevenLabs Voice Design instead of copying an actor. Imitating a real person's voice without consent breaks ElevenLabs' rules. It's also boring. I wanted my own Rorschach.
The prompt I landed on: "Low, gravelly male voice in his 50s. Cold, deadpan and clipped, like a noir detective dictating into a journal late at night."
The surprise: the preview was perfect, but in text to speech it sounded like a regular guy. A saved voice keeps its sound. The delivery lives in the settings.
The fix: stability down to 44%, similarity at 100%, and two delivery tags before every line: [deadpan] [low, raspy]. The detective came back.
2. The journal

The aesthetic of the journal was inspired by the vibrant color pallette the watchmen comic series is known to have. However, given my time contraint, the functionality was given priority over the look - so I wanted to spend more time on the journal's interconnectivity with the different technologies and people's interaction.
Each scan turns into a spoken entry in a few seconds, with no app and no sign-up. I built the site with Claude as my coding partner, and it does four jobs.
The test: the QR code opens a living inkblot that shifts like wet ink. Visitors type a first name and what they see.
The roast: Claude writes a one-line noir entry about that specific answer, with a New York twist. It also screens out slurs, other people's names and attempts to hijack it.
The voice: ElevenLabs reads the entry aloud on the visitor's phone. It joins a public archive anyone can replay.
The speaker: a phone on my coat looped the newest entries through a Bluetooth speaker. New ones jumped the queue, so people heard their own entry come out of my costume.
The map was the trickiest choice. I didn't want strangers to grant location access to a QR code they found on a costume. So my phone shared its location instead, and each entry is pinned where I was when it arrived. The archive shows my route up Sixth Avenue, with entries dropped along it. Only my phone shares a location, so visitors never have to share theirs.
Below are some images of the website. Feel free to skip to the 'Actual Journal' subsection to preview it action.



Also, here is a schematic of the system architecture.

3. The actual costume
I used simple cardboard I scaneged from Amazon boxes for the sign board, printed a QR code, and used a black sharpie for the messaging. It needed to look amateurish like an actual protest sign board. Everything was taped together with scotch tape.

For the wardrobe I already owned a trench coat, so half the work was done. The more challenging bit was designing Rorschach's mask. In the movie, Rorschach has an animated ink blot mask. I attempted to animate my own mask by using thermo-reactive crystals mixed with glue to create a paste that reacts to my breath.


The only thing missing from my getup was a fedora. Local thrift stores had none, so after bouncing between multiple stores in LES, I decided to go into a costume store and pick it up. I figured it shouldn't take long. Then I saw the line outside 'Halloween Adventure Shop'…

Secured the fedora. But I'm never visiting a costume store the night before Halloween again.
Everything was ready. Now it was time for the big day.
Halloween
The costume did its job: people stopped, scanned and laughed at their own roasts. I warmed up at Washington Square Park, where the first entries rolled in and strangers huddled around my coat to hear theirs. Then I joined the lineup at Canal Street and walked the parade up Sixth Avenue to 15th Street, with my buddy Shafin (aka The Ghost of Spirit Airlines) filming the whole way. In case you haven't, you can watch the video here.












What broke, and what saved it
Around 7 PM, mid-parade, the journal stopped saving. My storage on Vercel had hit its plan limit, and there's no upgrading a plan while you're shuffling up Sixth Avenue in a mask. I kept walking and people kept scanning, knowing none of it was being saved. The location trail stopped too.
The cause wasn't how much I stored, it was how often. Vercel's free plan includes 1 GB of Blob storage but only 2,000 uploads and file listings a month, and passing a limit locks the store (Vercel Blob pricing). My speaker phone checked for new entries every 15 seconds, and each check listed the files. That's hundreds of operations an hour, before a single entry is saved.
What saved the night was the order of operations. Each entry went to ElevenLabs to be voiced before the site tried to save it. So my ElevenLabs history already held the text and audio of every entry the site lost. As soon as I returned from the parade,I restored 27 entries from that history. Each line starts with its own timestamp, so they went back in the order they were made.
The Actual Journal and Results
Click here to read/listen to the Halloween journal.
Strangers added 46 entries to the journal in one night, and every entry is in the archive with a map of my route.
What I'd do differently
Count operations, not megabytes. Check for new entries with one small file instead of listing the whole store.
Rehearse the whole night. Leave the speaker loop running for three hours before the event, not three minutes.
Keep a second copy on purpose. ElevenLabs history saved me by accident. Next time, every entry goes to two places.
Conclusion
Rorschach's Journal, November 1st. Subject built a talking costume in 72 hours. Lost the storage on Sixth Avenue. Saved by the voice. Suspicious amount of ambition. Watching closely.
Thanks to Shafin for filming every minute of it.
