Inspiration
As a lifelong language learner, I've always had trouble understanding spoken speech because there's always so much more profanity than you've learned in class. (My "Eloquent French" course even ended up teaching us as much potty French as eloquent French. It was a good class (in my opinion).)
I also had a couple of other (in my opinion) super cool ideas for this hackathon. Unfortunately, I was dynamically allocated some extra deadlines (non-YHack) for this weekend, so scope became a pretty big issue. I wanted to make something super fun and that my friends and I might actually use and be entertained by, but that I could actually ship.
With all that in mind, I settled on this idea: Listen to a word; Decide if it's a blessing or a curse. It's ridiculously easy to explain but also kind of funny (in my opinion). I hope you enjoy it!
What it does
Listen to a word, see it on screen. Decide whether you should be mad or flattered!
How to try it
Use Snapchat to scan the Snapcode above!
How we built it
After discussing with the Snapchat team, I learned that Snapchat TTS wasn't very good for non-English languages. They suggested using an ElevenLabs TTS with saved audio files rather than dynamically generating them. I've been meaning to try ElevenLabs for a while, so that sounded good to me! Here is what I did:
I downloaded the Quiz template from Snapchat, then used Zed to explain the codebase with in-IDE context.
Separately, Claude was used to brainstorm 44 Blessings and 44 Curses in 14 languages of my choice (the languages I spoke so I could verify them, then most of the most spoken ones). After verifying its lists of blessings and curses in the languages I spoke, I had it generate additional lists in languages including Amharic, Hindi, Spanish, Italian, Swahili, and Thai. Then I had it package those words into the format required by the Snapchat Quiz template suggested by the Snapchat team.
The Quiz template was modified to (a) include these questions and (b) score based on raw number correct rather than exact permutation of answers. This involved both coding in Zed and going into Lens Studio and rewiring things manually.
A Python script was used to generate the TTS using API calls to ElevenLabs, with language settings for each question and prompts like "deceptively happy," "reverent," and "furious" used as red herrings in both Blessing and Curse categories. These were saved into an audio assets directory.
Then, again the quiz template was modified to include those audio files. Zed was used to generate TypeScript to be triggered by the project. The most difficult part here was actually in Lens Studio, but Zed was surprisingly able to guide me through it using its knowledge of the project filetree, specific file contents, and my screenshots.
The last step was to show answers, but I ran into quite a few issues getting this to work. I think this part probably failed due to my lack of facility with Lens Studio.
Challenges we ran into
Time pressure and scope were big because they multiplied the difficulty of every other challenge.
Learning the Lens Studio app was my first challenge. I ran through most of the tutorial before it got a bit buggy — you're not really able to start in the middle of the Tutorial once it bugs out. The scripting in TypeScript took a little longer than expected, because most of the bugs I had weren't actually in the code; they were in the wiring of components in Lens Studio.
Before publishing, I had tried to get an answer to show up after every question, but that turned out to be nontrivial. You can see the code for this in Github — I think I just wired it up wrong. Some of the languages also weren't available in ElevenLabs, even though ElevenLabs has perhaps the biggest foreign language selection.
But in all seriousness, the biggest challenge is probably making it past that Snapchat content review...
Accomplishments that we're proud of
Shipping something fun! Making it past that Snapchat content review...
What we learned
The biggest thing is that I'm developing an appreciation for scope. Without getting all philosophical, I'm learning that I don't have the time to learn every language in the world, to build all the features I want. Or to do every single thing perfectly. Getting it in before the deadline can sometimes be enough.
I also learned quite a bit about the real-life usage of TypeScript annotations and how Lenses =and filters actually work behind the scenes. Finally, I was reminded that content review exists, and that it would really behoove me to elevate my vocabulary posthaste.
What's next for Blessing or Curse?
More languages, more blessings, more curses! Blessings on your Ford Focus! Curses on your cow!
Built With
- claude
- elevenlabs
- lensstudio
- python
- snapchat
- typescript
- zed


Log in or sign up for Devpost to join the conversation.