A newer version of the Gradio SDK is available: 6.20.0
Alien Obfuscator β HuggingFace Build Small Hackathon Plan
Concept
An alien intelligence monitors all human communications. Resistance fighters encode messages as riddles drawn from ancient Earth texts β texts the alien cannot understand because they require cultural context, not decryption. The alien sees the riddle but can't get it. Humans can.
Architecture Overview
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Gradio App β
β β
β βββββββββββββββ ββββββββββββββββ βββββββββββββ β
β β ENCRYPT β β SOLVE β β GAME β β
β β (Create) β β (Decrypt) β β (Timed) β β
β ββββββββ¬βββββββ ββββββββ¬ββββββββ βββββββ¬ββββββ β
β β β β β
β ββββββββ΄ββββββββββββββββββ΄βββββββββββββββββββ΄βββββββ β
β β Riddle Generator (LLM) β β
β β Theme + Prompt β Riddle + 5 MCQs β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββ β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Functional Requirements
FR-1: Encrypt Mode (Create a Riddle)
FR-1.1 User inputs a plaintext message (β€100 characters recommended, no hard limit but prompt warns if too long).
FR-1.2 User selects a source text theme from:
- Greek / Roman Mythology
- Shakespeare
- Grimms' Fairy Tales / Folklore
- Classic Poetry
- Chinese Classics
- Surprise Me (randomly selected theme)
FR-1.3 On clicking "Encrypt", the system:
- Constructs a prompt that includes: the theme, the plaintext message, and formatting instructions
- Calls the LLM to generate a riddle + 5 answer options (LLM draws on training knowledge for cultural context)
- Returns a structured JSON:
{riddle, options: [5 strings], correct_index: 0-4, theme} - Displays the riddle beautifully in the UI
FR-1.4 If the LLM response fails to parse as valid JSON, retry once with a stricter prompt. If still failing, show a friendly error with a "try again" button.
FR-1.5 The generated riddle is presented in a "shareable card" format (styled HTML/Text block) that the user can copy and send anywhere (Discord, WhatsApp, etc.). The card includes:
- The riddle text
- The 5 options (shuffled; correct answer visible to sender for verification)
- A note: "Can you decipher this before the alien does?"
FR-1.6 A "Copy to Clipboard" button copies the entire riddle card as formatted text.
FR-1.7 The sender sees the correct answer clearly marked after generation, so they can verify the riddle makes sense before sharing.
FR-2: Solve Mode (Decrypt a Friend's Riddle)
FR-2.1 User pastes a shared riddle text (or enters it manually into a text area).
FR-2.2 App parses the riddle + 5 options from the pasted text and presents them as clickable MCQ buttons.
FR-2.3 User picks an answer β immediate feedback:
- Correct: Celebration animation/effect, message revealed
- Wrong: Strike indicator, allowed to retry (unlimited attempts, but attempt count is tracked for fun stats).
FR-2.4 After solving, user sees the original plaintext message.
FR-2.5 "Decrypt another?" button to clear and start fresh.
FR-3: Timed Game Mode
FR-3.1 A "Challenge Mode" separate tab where the app auto-generates riddles from random themes and random plaintext concepts (sourced from a "message bank" β a curated list of common phrases, proverbs, idioms, and concepts).
FR-3.2 Each round presents one riddle + 5 options. The player has 10 minutes (default, configurable) to solve as many as possible.
FR-3.3 Timer is visible and counts down. When timer hits zero, game ends and final score is shown.
FR-3.4 Scoring:
- +10 points per correct answer
- +5 bonus points for answering in under 15 seconds
- +3 point streak bonus (multiplied by consecutive correct streak: 0, 3, 6, 9...)
- No penalty for wrong answers (keeps it fun, not punishing)
FR-3.5 "New Game" button at the end. High score persisted in browser localStorage.
FR-3.6 Game configuration (before starting):
- Time limit slider (1β30 minutes, default 10)
- Theme filter (pick specific themes or "All")
- Number of riddles (unlimited by default, or capped at e.g. 20)
FR-4: Alien Narrative Wrapper
FR-4.1 The whole app has a dark, sci-fi aesthetic with an "alien invasion" framing.
FR-4.2 An "Alien Threat Monitor" element somewhere in the UI β purely cosmetic, shows the alien "scanning" with fake activity/glitch effects.
FR-4.3 In Encrypt mode: flavor text like "Message scrambled. The alien will see gibberish."
FR-4.4 In Game mode: flavor text like "The alien is listening. How many can you get past it?"
FR-4.5 Alien defeat/surprise reaction when player does well (e.g., "ALIEN CONFUSION DETECTED β IT CANNOT PARSE CULTURAL CONTEXT").
FR-5: Modular LLM Backend
FR-5.1 All LLM calls go through a single generate(prompt) function that abstracts the backend.
FR-5.2 Support for at least two backends, selectable via config/env:
- Hugging Face Inference API (serverless)
- Local Transformers pipeline (for running on GPU Spaces)
- Extensible to add more (OpenAI-compatible APIs, etc.)
FR-5.3 The prompt template is parameterized β swapping models should only require adjusting the prompt format, not the core logic.
FR-5.4 All generated riddle JSON is validated with a schema before being returned to the UI.
Non-Functional Requirements
NFR-1: Performance
- Riddle generation should return within 10β15 seconds (Inference API) or 5β10 seconds (local GPU).
- Show a loading animation/spinner during generation to hide latency.
- Pre-warm the model on Space startup if using local inference.
NFR-2: Polish
- Gradio app must look intentionally styled, not default Gradio.
- Custom CSS β dark theme, sci-fi fonts, glitch effects.
- Responsive layout (works on desktop and mobile browsers).
- Smooth transitions between modes.
NFR-3: Robustness
- Graceful handling of LLM errors (timeouts, malformed JSON, rate limits).
- Retry logic with exponential backoff for API calls.
- Input validation (empty messages, very long messages, pasting invalid riddle text).
NFR-4: Hackathon-Ready Deliverables
- App runs as a Hugging Face Space (Gradio SDK).
requirements.txtpinned to exact versions.- Demo video script/storyboard (to be filmed after build).
- Social media post draft (to be posted with demo).
README.mdwith: description, how to run, how to play.
Corpus Content Plan
The corpus is LLM-generated on the fly β no static text files are needed. The LLM draws on its pre-training knowledge of mythology, literature, and folklore to produce thematically authentic riddles. The theme name in the prompt (e.g. "Greek / Roman Mythology") is sufficient context.
| Theme | LLM Draws From | Example Ground |
|---|---|---|
| Greek/Roman Myth | Ovid's Metamorphoses, Homeric Hymns, Bullfinch's Mythology | "Icarus flew too close to the sun..." |
| Shakespeare | Hamlet, Macbeth, A Midsummer Night's Dream, Sonnets | "To thine own self be true..." |
| Grimms' Fairy Tales | Household Tales, Hans Christian Andersen | "Mirror mirror on the wall..." |
| Classic Poetry | Emily Dickinson, William Blake, Walt Whitman | "Because I could not stop for Death..." |
| Chinese Classics | Sun Tzu's Art of War, Tao Te Ching, Analects | "The supreme art of war is to subdue the enemy without fighting." |
Message Bank (plaintext concepts to auto-riddle in game mode) β configurable list in config.yaml:
"patience is a virtue", "don't count your chickens", "a rolling stone gathers no moss",
"the lion's share", "Achilles' heel", "Pandora's box", "star-crossed lovers", etc.
Prompt Engineering Strategy
System Prompt
You are a mischievous alien archaeologist who has spent centuries studying ancient
human texts. You craft riddles in the voice of [THEME_DESCRIPTION].
Generate a riddle whose ANSWER is: [PLAINTEXT]
Rules:
- The riddle must be solvable by a human familiar with [THEME_NAME], but confusing
to anyone without cultural context.
- The riddle should be 2β4 sentences, poetic, and contain at least one clever twist.
- Generate exactly 5 answer options: 1 correct (the PLAINTEXT itself), 4 plausible distractors.
- Distractors should be thematically adjacent (same domain, same era, similar concepts).
- Output ONLY valid JSON.
Expected Output Format
{
"riddle": "string (2-4 sentences)",
"options": ["correct_answer", "distractor1", "distractor2", "distractor3", "distractor4"],
"correct_index": 0,
"theme": "greek_myth"
}
Note: The options array is always shuffled so the correct answer appears in a random position. The correct_index tells us which one it is. The UI displays them in a fixed A-E order.
Gradio UI Layout
ββββββββββββββββββββββββββββββββββββββββββββββββ
β [ALIEN OBFUSCATOR v1.0] β
β [Encrypt] [Solve] [Challenge] [About] β β Tabs
ββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β βββββββββββββββββββββββββββββββββββ ββββββ β
β β Message to encrypt: β β β β β Alien monitor
β β [_____________________________] β β π½ β β (sidebar)
β β β β β β
β β Theme: [dropdown βΌ] β β β β
β β β β β β
β β [ENCRYPT] β β β β
β βββββββββββββββββββββββββββββββββββ ββββββ β
β β
β βββββββββββββββββββββββββββββββββββββββββββ β
β β GENERATED RIDDLE β β
β β βββββββββββββββββββββββββββββββββββ β β
β β β "I am the heel that doomed a β β β
β β β hero, the box that scattered β β β
β β β hope..." β β β
β β βββββββββββββββββββββββββββββββββββ β β
β β β β
β β A) Achilles' weakness β β
β β B) Sisyphus' boulder β β
β β C) Pandora's curiosity β correct β β
β β D) Icarus' ambition β β
β β E) Hercules' madness β β
β β β β
β β [Copy to Clipboard] β β
β βββββββββββββββββββββββββββββββββββββββββββ β
ββββββββββββββββββββββββββββββββββββββββββββββββ
File Structure
alien-obfuscator/
βββ app.py # Gradio UI (tabs, layout, CSS)
βββ config.py # Constants, model settings, paths (loads config.yaml)
βββ config.yaml # Operational parameters
βββ riddle_generator.py # Prompt builder + LLM abstraction
βββ game_engine.py # Timer, scoring, game state
βββ ui_components.py # Reusable Gradio blocks (riddle card, timer, etc.)
βββ utils.py # Clipboard, JSON validation, retry
βββ requirements.txt
βββ README.md
βββ assets/
βββ custom.css # Dark sci-fi theme
Risks & Mitigations
| Risk | Mitigation |
|---|---|
| LLM generates incorrect JSON | Schema validation + retry (up to 2) + fallback error message |
| LLM hallucinates wrong answer | The correct answer IS the plaintext β we force it in the JSON by construction; only distractors are creative |
| HF Inference API slow/cold-start | Use local Transformers + quantized model if on GPU Space; pre-warm on startup |
| Gradio limits for real-time timer | Use JavaScript injection for client-side countdown; server validates final time |
| Sharing riddles via copy-paste is fragile | Provide both "Copy Card" (formatted) and optional URL-encoded share link |
Hackathon Timeline (Suggested)
| Phase | What | Time |
|---|---|---|
| Hour 0β2 | Set up HF Space, Gradio skeleton, corpus loading, LLM backend | Foundation |
| Hour 2β5 | Build Encrypt tab: prompt engineering, riddle generation, riddle display | Core Feature 1 |
| Hour 5β8 | Build Solve tab: paste parser, MCQ UI, feedback animations | Core Feature 2 |
| Hour 8β12 | Build Challenge Mode: game engine, timer, scoring, config | Core Feature 3 |
| Hour 12β14 | Polish: CSS theming, alien aesthetic, animations, flavor text | Delight |
| Hour 14β16 | Testing, bug fixes, edge cases, error handling | Robustness |
| Hour 16β18 | Demo video + social post + README | Submission |
Model Target
- Primary: Gemma 4 31B (β€32B limit)
- Fallback: Gemma 4 26B-A4B (MoE, lower VRAM)
- Code is modular β swap model via config/env variable.
Decisions Made
- The riddle IS the encryption. Solving the riddle is decrypting. No separate cipher layer.
- The LLM generates the riddle + 1 correct answer + 4 plausible distractors (5 total MCQ options).
- The LLM composes riddles drawing directly from its pre-training knowledge of the chosen theme β no static corpus files needed.
- Themes: Greek/Roman Mythology, Shakespeare, Grimms' Fairy Tales, Classic Poetry, Chinese Classics. No religious texts.
- Sender sees the correct answer highlighted after generation for verification.
- Solver gets unlimited retry attempts on a friend's riddle; attempt count tracked for fun.
- Challenge mode: 10-minute default timer, customizable 1β30 minutes.
- Sharable riddle format: copy-paste text card. URL-encoded share link as stretch goal.
- High scores persisted in localStorage (stateless, no database needed).