The Seer of Ligma
Inspiration
My project, "The Seer of Ligma," was born directly from the spirit of the "Silly Sh!t Challenge." I was inspired by the chaotic, unexpected, and often self-referential humor that defines internet and Reddit meme culture. My core idea was to create a "bait-and-switch" experience: what if a game presented itself as a serious, mystical fortune-telling app, only to pivot into an absurd punchline that then becomes the core game mechanic?
I wanted to capture that feeling of a classic internet joke, blending it with the addictive, "just one more round" gameplay of arcade classics like Arkanoid and Breakout. My goal was to build something that would make a Redditor laugh out loud from the sheer ridiculousness of the concept.
What it does
"The Seer of Ligma" is a two-part interactive experience.
The Intro: It begins as a fake fortune-telling app. The user is presented with a mysterious, glowing crystal ball and prompted to "Hold the crystal ball to reveal your destiny..." As they hold, the screen shakes, the orb glows brighter, and mysterious whispers build anticipation. After five seconds, the app dramatically reveals the punchline: "LIGMA BALLS!"
The Game: The app then instantly transforms into a fast-paced arcade game. The two "balls" from the punchline become the playable game objects. The player controls a paddle at the bottom of the screen, trying to keep the balls in play. To score points, the player must use the balls to hit falling "set-up" words for other classic internet memes (like
Bofa,Candice,Sugma, etc.). When a word is hit, it transforms into its full punchline (e.g., "Bofa deez nuts!") before exploding. The game features a dynamic difficulty curve that increases over time and a secure online leaderboard for players to compete for the highest score.
How I built it
Framework: I built the application using React and TypeScript. I used Framer Motion for all the cinematic animations in the intro and for UI feedback during the game.
Backend and Database: I chose Supabase as my all-in-one backend solution.
- Supabase Storage: All audio files are hosted in a public Supabase bucket.
- Supabase Postgres DB: I used the database to create a
high_scorestable for my global leaderboard.
Security: I learned early on that I couldn't trust the client with score submissions. To prevent cheating, I implemented a secure score submission system using a Supabase Edge Function. This server-side function receives a player's score and a secret checksum. It validates the checksum on the server before using its admin privileges to insert the score into the database. This makes it impossible for users to submit fake scores from their browser console. The Edge Function also manages the database to only keep each user's top 5 scores, saving space and keeping the leaderboard focused.
Development Process: My process was an iterative collaboration with AI tools. I acted as the Project Manager and Designer, using Bolt AI as my developer and Gemini as a technical consultant. This allowed me to embrace Test-Driven Development (TDD), writing an extensive suite of unit and integration tests to solve the complex physics bugs that arose.
Challenges I ran into
My biggest challenge, by far, was the game physics. I spent a significant amount of time debugging subtle but game-breaking bugs that are common in real-time applications.
The most difficult problem was a state corruption bug. After a few minutes of gameplay, as the difficulty scaled up, paddle collisions would start failing permanently. I discovered that my collision functions were not correctly using the game's current difficulty state, causing a desynchronization between the ball's real speed and the physics calculations. My initial unit tests were not designed to catch this kind of long-running state issue.
I solved this by writing a new, more rigorous suite of tests that specifically simulated these high-difficulty, late-game scenarios. This allowed me to pinpoint the flaw and re-architect the collision and game loop logic to be robust and state-aware, finally making the game stable.
Accomplishments that I'm proud of
The "Bait-and-Switch" Concept: I'm incredibly proud of the creative concept itself. The seamless transition from a serious, mystical intro to an absurd, meme-based arcade game is exactly the kind of "Silly Sh!t" I set out to create.
Building a Robust Physics Engine: Overcoming the incredibly difficult physics and state management bugs was a major accomplishment. I didn't just patch the code; I built a comprehensive test suite that allowed me to engineer a truly stable and reliable game loop that correctly handles complex, multi-collision frames.
Implementing a Secure Leaderboard: Taking the extra step to build a cheat-proof leaderboard using a Supabase Edge Function was a huge win. It was a great learning experience in building professional, secure web applications and ensures a fair and competitive experience for all players.
What I learned
The Power of Test-Driven Development (TDD): I learned that for a complex system like a physics engine, TDD is not just a best practice; it is essential. The most difficult bugs were impossible to find through manual play and were only solved by writing specific tests that reproduced the failing edge cases.
State Management is Everything: The hardest bugs were not in the individual functions but in the high-level game loop that managed and passed down the game's state. I learned the critical importance of preventing stale state and ensuring all parts of the application are working with the most current data, especially in a system where variables are constantly changing.
Never Trust the Client: My initial, simple approach to a leaderboard was vulnerable. The process of implementing a secure, server-side Edge Function was a crucial lesson in web security.
What's next for Seer of Ligma
I believe "Seer of Ligma" has the potential to be a truly viral and endlessly replayable game. My next steps are focused on adding more layers of polish and content.
Full Audio Integration: The immediate next step is to implement sound effects for all key game events using the URLs from my Supabase Storage bucket. Audio will make the experience dramatically more immersive and funny.
More Memes! I plan to add a much wider variety of falling enemy "set-up" words to keep the gameplay fresh and reference a broader range of internet culture.
Power-ups & Power-downs: I want to introduce items that can drop from destroyed words, such as a temporary "wider paddle," a "multi-ball" power-up, or even "power-downs" like "inverted controls" or "greased paddle" to increase the chaos.
Visual Polish: I plan to add more particle effects, screen shake on major impacts, and other visual feedback to make the game feel even more dynamic and engaging.
Built With
- netlify
- react
- supabase
- tailwind
- typescript
Log in or sign up for Devpost to join the conversation.