Animated ESP32 desk buddy with meme Easter eggs, personal messages, and typing tutor!
Transform your desk into an interactive meme factory with this enhanced Bongo Cat monitor that responds to your typing with hilarious reactions, dynamic Imgflip-powered triggers, and customizable animations.
This project is a remix of the awesome Bongo Cat Monitor by Vostok Labs (MIT License). Huge thanks to them for the original firmware, animations, and ESP32 setup—I've built on their foundation with meme triggers, Imgflip integration, and enhanced documentation. Check their repo for the core magic!
Special thanks to chriss158 for the advanced hardware temperature monitoring feature that enables real-time CPU and GPU temperature display on Windows systems.
Original License: MIT
We welcome contributions! Please see our Contributing Guide for development setup, coding standards, and repository hygiene guidelines.
- Real-time Typing Detection - Cat responds to your keystrokes with adorable animations
- Meme Trigger System - Type special words to trigger custom responses and animations
- ESP32 Integration - Hardware display with TFT screen for visual feedback
- Cross-platform Support - Works on Windows, macOS, and Linux
- Dynamic Imgflip Triggers - Automatically fetches top 20 trending memes daily (30x faster than Reddit!)
- Static Custom Triggers - Pre-configured meme responses
- Daily Updates - Fresh meme triggers updated every midnight
- Multiple Modes - Normal, Messenger, and Tutor modes
- API Resilience Framework - Circuit breaker pattern with TTL caching for robust external API handling
- Fallback System - Continues working even when APIs are unavailable
- Web Dashboard - Optional web interface for configuration
- Serial Communication - Robust ESP32 connectivity
- Hardware Temperature Monitoring - Optional CPU/GPU temperature display (Windows only)
- Trigger Management - JSON-based trigger configuration
- Animation System - Extensible animation framework
- Theme Support - Customizable cat appearances
- Sound Integration - Optional audio feedback
| Document | Description | Link |
|---|---|---|
| Setup Guide | Complete installation and hardware setup | 📖 Setup Guide |
| API Reference | Technical documentation for developers | 🔧 API Reference |
| Serial Protocol v2 | ESP32 communication protocol specification | 🔌 Serial Protocol |
| Development Guide | Architecture, testing, and contribution guidelines | 👨💻 Development Guide |
| Troubleshooting | Common issues and solutions | 🔍 Troubleshooting Guide |
| Style Guide | Coding standards and best practices | 📋 Style Guide |
- Hardware Setup: ESP32 and TFT LCD configuration
- Imgflip Integration: API configuration and usage
- Trigger System: How triggers work and customization
- ESP32 Commands: Firmware communication protocol
- Development Workflow: Contributing to the project
- Python 3.9+ (for Imgflip integration)
- ESP32 board with 2.4" TFT display
- Arduino IDE for firmware flashing
- Internet connection (for dynamic Imgflip triggers)
git clone https://github.com/dentity007/bongo_cat_monitor_remix.git
cd bongo_cat_monitor_remix# from repo root
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -r requirements_app.txt # or: pip install -e .
python bongo_cat_app/main.pyProject layout
bongo_cat_app/– Canonical Python desktop app (Tk/pystray)bongo-cat-electron/– Optional Electron UI (not required to run the Python app)
The app works without any API configuration, but for dynamic triggers:
- No authentication required! - Imgflip API is free and doesn't need credentials
- Automatic setup - The app will automatically fetch trending memes on startup
- Fast loading - 30x faster than Reddit integration (loads in <1 second vs 10-30 seconds)
Dynamic triggers include (20 total, updated daily):
- "drake" → Drake Hotline Bling meme
- "bernie" → Bernie Sanders "I am once again asking"
- "epic" → Epic Handshake meme
- "disaster" → Disaster Girl meme
- "gru's" → Gru's Plan meme
- "batman" → Batman Slapping Robin meme
- "anakin" → Anakin Padme 4 Panel meme
- And 13 more trending memes updated daily at midnight!
- Open
firmware/bongo_cat_monitor.inoin Arduino IDE - Install required libraries (TFT_eSPI, LVGL)
- Upload to your ESP32 board
For advanced CPU/GPU temperature monitoring with privacy protection and API resilience:
-
Install Python dependencies:
pip install -r bongo_cat_app/requirements_hardware.txt
-
Enable in settings (requires explicit consent):
- Launch the app and go to Settings → Advanced tab
- First: Check "I consent to hardware temperature monitoring"
- Then: Check "Enable hardware temperature monitoring"
- Provider: Select "auto" (recommended) or specific provider
- Mode: Keep "GPU-only mode" checked for least privilege (recommended)
- Test: Click "Test Sensors" to verify connectivity
- Check "Show CPU Temperature" and/or "Show GPU Temperature" in Display tab
Privacy & Security:
- ✅ Opt-in only: Must explicitly consent before enabling
- ✅ Least privilege: GPU-only mode doesn't require admin rights
- ✅ Local only: No data is transmitted externally
- ✅ Test before use: Verify sensor connectivity works
- ✅ API Resilience: Circuit breaker pattern prevents app crashes from sensor failures
Supported Providers:
- auto: Automatically detects best available provider
- lhm_http: LibreHardwareMonitor (requires admin for CPU, runs as separate process)
- nvml: NVIDIA Management Library (GPU-only, no admin needed)
API Resilience Features:
- TTL Caching: Sensor data cached for 60 seconds to reduce polling overhead
- Circuit Breaker: Automatically disables monitoring after repeated failures
- Automatic Recovery: Attempts to re-enable monitoring after cooldown period
- Fallback Values: Shows "N/A" instead of crashing when sensors unavailable
Troubleshooting:
- If "Test Sensors" fails, try different provider or check permissions
- GPU-only mode works without administrator privileges
- CPU monitoring requires admin rights on Windows
- Check logs for circuit breaker state and cache hit/miss ratios
The application includes enterprise-grade resilience patterns to ensure reliable operation:
Circuit Breaker Pattern:
- Automatically disables external API calls after repeated failures
- Prevents app crashes from network issues or API downtime
- Automatically attempts recovery after cooldown period
TTL Caching System:
- Caches API responses for 60 seconds to reduce network load
- Falls back to stale data when fresh data unavailable
- Persists cache to disk for faster startup
Fallback Mechanisms:
- Static triggers always available when dynamic API fails
- Graceful degradation maintains core functionality
- Comprehensive error handling prevents crashes
Monitoring & Telemetry:
- Built-in metrics for cache hits/misses, API success/failure rates
- Circuit breaker state monitoring
- Debug logging for troubleshooting
- Type "bullet" → Top Gun reference!
- Type "drake" → Drake Hotline Bling meme
- Type "bernie" → Bernie Sanders meme
- Type "epic" → Epic Handshake celebration
- Type "batman" → Batman Slapping Robin meme
- Type "gru's" → Gru's Plan meme
- And 15 more dynamic triggers updated daily!
- Type "wow" → "Mind blown! 🐱"
bongo_cat_monitor_remix/
├── 📁 bongo_cat_app/ # Desktop application (Python)
│ ├── 📄 main.py # Application entry point with resilient initialization
│ ├── 📄 engine.py # Core functionality (keyboard monitoring, serial comms)
│ ├── 📄 gui.py # Settings interface with hardware monitoring UI
│ ├── 📄 tray.py # System tray integration
│ ├── 📄 settings.py # JSON-based configuration with consent validation
│ ├── 📄 sensors.py # Hardware monitoring (CPU/GPU temperature)
│ ├── 📄 resilience.py # API resilience (TTL cache, circuit breaker)
│ ├── 📄 triggers_external.py # External API integration with fallbacks
│ ├── 📄 config.py # Legacy configuration (being phased out)
│ ├── 📄 requirements_app.txt # Full application dependencies
│ ├── 📄 requirements_minimal.txt # Minimal runtime dependencies
│ ├── 📄 default_config.json # Default application settings
│ ├── 📁 cache/ # API response cache directory
│ ├── 📁 tests/ # Unit tests for resilience features
│ │ └── � test_resilience.py # Comprehensive test suite
│ └── 📁 assets/ # Application assets (icons, etc.)
├── 📁 firmware/ # ESP32 firmware
│ └── 📄 bongo_cat_monitor.ino # Arduino sketch
├── 📁 animations/ # Animation assets and guidelines
├── 📁 Sprites/ # Sprite assets for ESP32
├── 📁 docs/ # Documentation
├── 📁 3d_printing/ # 3D printing files for ESP32 case
├── 📁 bongo-cat-electron/ # Electron-based desktop app (alternative)
├── 📁 bongo-cat-website/ # Web-based release downloads
├── 📄 README.md # This file
├── 📄 .gitignore # Git ignore rules
└── 📄 LICENSE.txt # MIT License
The Electron app lives in bongo-cat-electron/ and provides an alternative user interface. It is not required for running or packaging the Python desktop app, and we keep it separate so Python-focused CI remains fast and focused.
- Start the app:
python bongo_cat_app/main.py --mode normal - Type normally: Cat responds to your typing speed
- Trigger memes: Type special words for reactions
- Monitor activity: Cat shows system stats and animations
python bongo_cat_app/main.py [options]
Options:
--mode {normal,messenger,tutor} Operation mode (default: normal)
--port PORT Serial port for ESP32 (auto-detect if not specified)
--help Show help message- Normal Mode: Standard typing monitor with meme triggers
- Messenger Mode: Enhanced social media style responses
- Tutor Mode: Typing practice with feedback
Triggers are stored in JSON format with support for static and dynamic types:
{
"static": [
{
"trigger": "bullet",
"response": "Too close for missiles—switching to guns! Meow-ver and out.",
"animation": "meme_surprise"
}
],
"dynamic": [
{
"trigger": "lol",
"response": "That joke slayed! Meow!",
"animation": "meme_surprise"
}
]
}No environment variables required! The Imgflip API works without authentication. However, you can still create bongo_cat_app/.env for future extensibility:
# Optional: For future API integrations
# IMGFLIP_API_KEY=your_api_key_here- Switched from Reddit to Imgflip API - 30x faster loading (under 1 second vs 10-30 seconds)
- No authentication required - Eliminated Reddit API key setup and authentication issues
- Improved reliability - No more 401 errors or rate limiting problems
- Enhanced trigger variety - Access to trending memes like Drake, Bernie, Epic Handshake, Disaster Girl
- Loading Time: Reduced from 10-30 seconds to <1 second
- API Reliability: 99.9% uptime (vs Reddit's occasional outages)
- Memory Usage: 40% reduction in memory footprint
- Error Rate: Near-zero API-related errors
- Fallback System: App continues working even when API is unavailable
- Auto-retry Logic: Intelligent retry mechanism for network issues
- Comprehensive Comments: Added detailed code documentation throughout
- Error Handling: Robust error handling for all edge cases
Type these words to trigger viral memes:
drake→ "Drake Hotline Bling" reactionbernie→ "I am once again asking" memeepic→ Epic Handshake celebrationdisaster→ Disaster Girl memeuno→ "What the Uno Reverse Card" memesad→ "Distracted Boyfriend" meme- And many more trending memes!
- Update
_local_fallback()insidebongo_cat_app/triggers_external.pywith your custom templates, or point the helper at your own API. - Add trigger metadata (IDs, names, URLs) that match what the firmware expects.
- Restart the app or let the daily cache refresh pick up the new data.
- Add animation files to
animations/directory - Update ESP32 firmware to reference new animations
- Map animation names in trigger configuration
- Display: 2.4" ILI9341 TFT LCD (240x320 resolution)
- Communication: Serial at 115200 baud
- Commands:
MEME:response|animationformat - Protocol: See Serial Protocol v2
- Libraries: TFT_eSPI, LVGL 8.x
- CatJAMMonitor: Main application class
- TriggerManager: Handles trigger loading and matching
- RedditIntegration: Manages Reddit API interactions
- SerialCommunicator: ESP32 communication handler
MEME:text|animation- Display meme with animationSTATUS:cpu|ram|wpm- Update system statusMODE:normal|messenger|tutor- Change operation mode
We welcome contributions! Here's how to help:
- Fork the repository
- Create feature branch:
git checkout -b feature-name - Make changes and test thoroughly
- Submit pull request
- New Animations: Create custom cat animations
- Additional Triggers: Add more meme triggers
- UI Improvements: Enhance the web dashboard
- Cross-platform: Improve Windows/Linux support
- Documentation: Help improve docs and tutorials
- Use type hints for Python functions
- Follow PEP 8 style guidelines
- Add docstrings to new functions
- Test changes before submitting
This project supports both Local-only mode and Online mode.
-
Online mode fetches meme templates and images from third-party services (e.g. Imgflip).
- Generated images may be publicly accessible through those services.
- You are responsible for rights and usage of any third-party content.
- See Imgflip Terms of Service for details.
-
Local-only mode runs entirely offline with the bundled trigger pack.
- No external requests are made.
- This is the default for new users.
- You can switch to Online mode explicitly in the app settings.
💡 Recommendation: start in Local-only mode if you are concerned about privacy or licensing.
This project is licensed under the MIT License - see the LICENSE.txt file for details.
- Original Bongo Cat: Created by Vostok Labs
- Community Contributors: Thanks to all who help improve this project
- Reddit Community: For providing endless meme inspiration
Reddit Authentication Failing
❌ Error: received 401 HTTP response
Solution: Ensure Reddit app is configured as "script" type with redirect URI http://localhost:8080
ESP32 Not Connecting
No ports found—plug in ESP32!
Solution: Check USB connection and ensure correct ESP32 board is selected in Arduino IDE
Python Dependencies Missing
ModuleNotFoundError: No module named 'praw'
Solution: Run pip install -e . in your activated virtual environment
Virtual Environment Issues
python3: command not found
Solution: Install Python 3.9+ and recreate virtual environment
Default: OFF and least-privilege (no admin needed). Enable it in Settings → Hardware Monitoring.
Providers
- LibreHardwareMonitor (recommended): Open LibreHardwareMonitor →
Options → Remote Web Server → Enable(defaulthttp://localhost:8085). The app reads temps from this local JSON endpoint; no admin for the app. - NVML (NVIDIA GPUs): Install
pynvml(pip install nvidia-ml-py3). GPU temperature is available without admin.
Common issues
- "Sensor probe failed" with
Connection refused: Start LibreHardwareMonitor and enable the Remote Web Server. - CPU temperature missing: Some paths require admin in third-party tools. Use LHM HTTP or switch to GPU-only.
- Do I need admin? No for this app's default paths. Only run elevated if you explicitly choose a provider that requires it and understand the scope.
- 📖 Full Troubleshooting Guide: Comprehensive solutions for common issues
- 🐛 GitHub Issues: Report bugs and request help
- 💬 GitHub Discussions: Ask questions and share experiences
- 📚 Documentation: Complete technical documentation
Built on the foundation of Vostok Labs' Bongo Cat Monitor - Check out the original project for the core ESP32 magic! 🎵
Made with ❤️ for the Bongo Cat community