ACTIVE PRODUCT (2026): HELLDECK β THE DESCENT lives in
descent/. It is a phones-only Preact + Cloudflare Durable Object party game with nine playable games and a 1,024-card corpus. Start withNEXT_AGENT.mdandHELLDECK2_HANDOFF.md. The Android/on-device-AI material below documents the frozen legacy product and is not the current build target.
The AI-powered party game that learns your crew's sense of humor
One Device. 14 Mini-Games. Infinite Chaos.
HELLDECK is an Android party game for 3-16 players that combines classic party game mechanics with on-device AI to generate personalized content. The game learns from player feedback to deliver funnier, more targeted cards over time.
- On-Device AI: Uses TinyLlama/Qwen language models running locally for privacy and speed
- Adaptive Learning: Thompson Sampling algorithm improves content based on LOL/MEH/TRASH feedback
- Quality-First Generation: LLM generates unique cards with gold standard examples as guidance
- Smart Fallback Chain: LLM β Curated Gold Cards β Template System ensures playable content
- Contract Validation: Every card validated against game rules before display
- Brainpack Export/Import: Save and share your crew's learned preferences
All games sourced from HDRealRules.md - the canonical game design document.
- π― Roast Consensus (20s) - Vote for who best fits the roast prompt
- π€₯ Confession or Cap (15s) - TRUE/FALSE confessions with lie detection
- π Poison Pitch (30s) - Debate two terrible "Would You Rather" options
- βοΈ Fill-In Finisher (60s) - Judge sets up, others write punchlines
- π© Red Flag Rally (45s) - Defend undateable people, vote SMASH/PASS
- π Hot Seat Imposter (15s) - Impersonate a player, fool the room
- π± Text Thread Trap (15s) - Reply to texts in mandatory tones
- β±οΈ Taboo Timer (60s) - Describe words without forbidden terms
- π The Unifying Theory (30s) - Connect three unrelated items
- π₯ Title Fight (15s) - Instant head-to-head challenges
- π΅οΈ Alibi Drop (30s) - Hide mandatory words in your alibi
- πͺ Reality Check (20s) - Self-awareness test with group consensus
- π£ Scatterblast (10-60s) - Category listing before bomb explodes
- π Over/Under (20s) - Bet on personal statistics
Full rules: See HDRealRules.md for complete gameplay mechanics and scoring.
- README.md - This file (quick start, overview)
- ARCHITECTURE.md - System design, data flow, component breakdown
- FEATURES.md - Complete feature documentation (gameplay, AI, UI)
- API.md - Developer API reference
- DEVELOPMENT.md - Development setup, building, testing
- DEPLOYMENT.md - Build configuration, release process
- CHANGELOG.md - Version history and changes
- CONTRIBUTING.md - Contribution guidelines
- HDRealRules.md - Official game rules (source of truth)
- Android Studio Giraffe (2023.3.1) or later
- Android SDK 21+ (target: 34)
- Kotlin 1.9.25+
- Java 17+
- Python 3.7+ (optional, for tools)
- Device Android 5.0+ with USB debugging
Verified tester APK
The current sideloadable Android test build is published as a GitHub prerelease:
- HELLDECK Android 1.0.1 β Tested Debug Build
- Direct APK download
- SHA-256:
3c84d4d441b7559b680882351b28c4160d97d008a52296c278d31248bf0af338
This is a debug-signed, all-games-unlocked test build from commit 0093e26. Its source/variant
passed 155 JVM tests and 23 API 29 instrumentation tests. It is not Play-signed; install it fresh,
and read the prerelease notes before testing because uninstalling a differently signed
com.helldeck build removes its local data.
Method 1: Android Studio (Recommended)
# Clone repository
git clone https://github.com/your-org/HELLDECK.git
cd HELLDECK
# Open in Android Studio
# File β Open β Select HELLDECK directory
# Wait for Gradle sync
# Run β Run 'app' (Shift+F10)Method 2: Command Line
# Internal debug build (all game content unlocked)
./gradlew :app:assembleInternalDebug
adb install -r app/build/outputs/apk/internal/debug/app-internal-debug.apk
# Production-like debug build used by CI
./gradlew :app:assembleProductionDebug
adb install -r app/build/outputs/apk/production/debug/app-production-debug.apkMethod 3: Desktop Loader (GUI)
cd loader
pip install -r requirements.txt
python helldeck_loader.pyNote: Builds require network access for Gradle dependency resolution.
| Gesture | Action |
|---|---|
| Long-press | Draw new card |
| Left/Right tap | Cycle options (where applicable) |
| Center tap | Confirm selection |
| Two-finger tap | Back/undo |
| Vibrate | Phase change indicator |
| Torch flash | Scoring lock confirmation |
The game learns from your feedback to show funnier content over time, and you can now back up that history.
- Export learned data: Home β Export Brain creates a zipped brainpack under the app cache (
cache/brainpacks/<name>.zip) containingbrainpack.json. - Import on new device: Home β Import Brain and pick any brainpack
.zip. Players, template stats, and recent exposures merge into the current database. - Brainpacks are human-readable JSON β perfect for versioning or sanity-checking before sharing with other crews.
HELLDECK/
βββ app/ # Android application
β βββ src/main/
β β βββ java/com/helldeck/
β β β βββ MainActivity.kt # App entry point
β β β βββ HelldeckApp.kt # Application class
β β β βββ content/ # Content generation system
β β β β βββ engine/ # GameEngine, OptionsCompiler
β β β β βββ generator/ # LLMCardGeneratorV2, CardGeneratorV3
β β β β βββ validation/ # Contract & semantic validators
β β β β βββ model/ # FilledCard, GameOptions
β β β βββ engine/ # Core game mechanics
β β β β βββ GameMetadata.kt # 14 game definitions
β β β β βββ Config.kt # YAML config loader
β β β β βββ PlayerManager.kt # Player state management
β β β βββ ui/ # Jetpack Compose UI
β β β β βββ Scenes.kt # Main UI orchestrator
β β β β βββ scenes/ # 16 scene composables
β β β β βββ interactions/ # 14 game renderers
β β β β βββ vm/ # GameNightViewModel
β β β βββ data/ # Room database entities
β β β βββ llm/ # LocalLLM, ModelManager
β β β βββ analytics/ # Telemetry, metrics
β β βββ assets/
β β β βββ gold_cards.json # 700 curated cards (50/game)
β β β βββ lexicons_v2/ # 28 typed word lists
β β β βββ templates_v3/ # 17 blueprint files
β β β βββ model/ # Trained artifacts, rules
β β β βββ settings/ # default.yaml config
β β β βββ models/ # LLM .gguf files (bundled)
β β βββ cpp/ # Native llama.cpp bridge
β βββ build.gradle # App build config
βββ third_party/llama.cpp/ # Submodule for LLM inference
βββ Heimdall/ # USB device filtering (macOS)
βββ loader/ # Python GUI installer
βββ tools/ # Quality verification scripts
βββ docs/ # Extended documentation
βββ build.gradle # Root build config
βββ CMakeLists.txt # Native build config
See DEVELOPMENT.md for complete development guide.
Quality Checks (Makefile):
make fix # Apply all autofixes (format + lint)
make check # Run checks without changes (CI-safe)
make test # Run unit tests
make ci # Full CI pipelineBuild & Test:
./gradlew :app:assembleInternalDebug # Developer APK
./gradlew :app:assembleProductionDebug # CI/production-like APK
./gradlew :app:testProductionDebugUnitTest # Unit tests
./gradlew :app:connectedProductionDebugAndroidTest # Instrumented testsCard Quality Tools:
# Audit specific game (generates CSV report)
./gradlew :app:cardAudit -Pgame=POISON_PITCH -Pcount=100 -Pseed=12345
# Quality sweep across all games
./gradlew :app:cardQuality -Pcount=80 -Pseeds=701,702,703 -Pspice=2
# Lint lexicons
python tools/lexicon_lint.pyThree-tier fallback chain ensures playable content:
- Generator:
LLMCardGeneratorV2with TinyLlama/Qwen models - Strategy: Quality-focused prompts with gold card examples
- Temperature: Spice level (1-5) β (0.5-0.9 temperature)
- Validation: Quality score β₯0.6, clichΓ© filtering, length checks
- Retry: 3 attempts, 2.5s timeout each
- Location:
app/src/main/java/com/helldeck/content/generator/LLMCardGeneratorV2.kt
- Count: 700 curated cards (50 per game)
- Quality: All cards rated 9-10/10
- Format: Structured JSON with metadata
- Location:
app/src/main/assets/gold_cards.json
- Generator:
CardGeneratorV3with blueprint CSP solver - Blueprints: 17 per-game template files
- Lexicons: 28 typed word lists with metadata
- Artifacts: Trained priors, compatibility weights, banned lists
- Location:
app/src/main/assets/templates_v3/,lexicons_v2/,model/
See ARCHITECTURE.md for technical details.
Jetpack Compose + Material3 with custom dark theme for party environments.
Core Interaction Components:
VotePlayerRenderer- Avatar-based voting (Roast Consensus)ABChoiceRenderer- Binary choice voting (Poison Pitch)JudgePickRenderer- Judge selection (Fill-In Finisher)ReplyToneRenderer- Tone selection (Text Thread Trap)TabooGuessRenderer- Word guessing with forbidden termsTargetSelectRenderer- Player targeting (Reality Check)HideWordsRenderer- Word smuggling (Alibi Drop)SpeedListRenderer- Category listing (Scatterblast)
Feature Screens:
RollcallScene- Player attendance with emoji avatarsGameRulesScene- In-game rule referenceCardLabScene- Developer card testing toolStatsScreen- Player performance analyticsSettingsScreen- Configuration and preferences
See FEATURES.md for complete UI feature documentation.
Thompson Sampling with contextual bandit optimization:
- Algorithm:
ContextualSelectorusing Upper Confidence Bound (UCB) - Feedback: LOL (1.0) > MEH (0.35) > TRASH (0.0)
- Persistence: Template statistics stored in Room database
- Anti-Repetition: Session-based exposure tracking
- Exploration: Epsilon-greedy strategy balances variety vs quality
Database Entities:
TemplateStatEntity- Visit counts, reward sums per templateTemplateExposureEntity- Recent exposures per sessionGameNightEntity- Session tracking for game nights
See ARCHITECTURE.md for learning algorithm details.
Device administrator features for dedicated party devices:
- App Locking: Device locked to HELLDECK only
- UI Suppression: System UI elements hidden
- Fullscreen: Immersive mode for distraction-free gameplay
- Setup: Requires freshly reset device for device owner assignment
- Alternative: Use Android's built-in Screen Pinning (Settings β Security)
Implementation: HelldeckDeviceAdminReceiver.kt, Kiosk.kt
| Requirement | Specification |
|---|---|
| Minimum OS | Android 5.0 (API 21) |
| Target OS | Android 14 (API 34) |
| Architecture | arm64-v8a (ARMv8 64-bit) |
| RAM | 2GB+ recommended for LLM inference |
| Storage | ~150MB (app + models + assets) |
| Permissions | Camera (torch), Vibrator, Wake Lock |
| Network | Optional (build-time only) |
Build Issues:
# Clean build artifacts
./gradlew clean
# Sync Gradle and rebuild
./gradlew --refresh-dependencies :app:assembleInternalDebug
# Check native dependencies
cd third_party/llama.cpp && git submodule update --initInstallation Issues:
- Enable "Install from unknown sources" in device settings
- Verify USB debugging:
adb devices - Check storage space (need ~150MB)
Runtime Issues:
- LLM not loading: Check
files/models/directory on device - Cards repeating: Export/import brainpack to reset session
- Kiosk mode fails: Requires factory reset device for device owner
See TROUBLESHOOTING.md for complete guide.
| Layer | Technology |
|---|---|
| UI | Jetpack Compose, Material3, Compose Navigation |
| Language | Kotlin 1.9.25, Java 17 |
| Database | Room 2.6.1, DataStore Preferences |
| AI/ML | llama.cpp (TinyLlama, Qwen), Thompson Sampling |
| Serialization | Kotlinx Serialization, Gson, SnakeYAML |
| Quality | ktlint, detekt, spotless, ruff |
| Testing | JUnit 5, MockK, Robolectric, Compose Testing |
| Build | Gradle 8.5.2, CMake 3.22.1, KSP 1.9.25 |
| Native | C++17, NDK, llama.cpp submodule |
See CONTRIBUTING.md for contribution guidelines.
Quick checklist:
- β Read HDRealRules.md for game design principles
- β Follow code style guidelines (ktlint, detekt)
- β Add tests for new features
- β Update documentation
- β Test on physical device (3+ players ideal)
This project is designed for personal and educational use. Game mechanics and content are original creations.
- llama.cpp - Georgi Gerganov and contributors
- TinyLlama - StatNLP Research Group
- Qwen - Alibaba Cloud
- Jetpack Compose - Google Android Team
Last Updated: January 2026
Version: 1.0.1
Build: See BuildConfig.GIT_HASH for commit
Built with β€οΈ for party game enthusiasts everywhere