Author: Fanxing Bu
Course: Carnegie Mellon University, Heinz College, 95702 Project 4
JokeApp is a full-stack project developed as part of CMU Heinz 95702 coursework. It aims to offer users a moment of light-hearted fun during their busy workdays — reflecting Carnegie Mellon's spirit: "My heart ❤️ is in the work."
The application demonstrates practical system integration: combining mobile frontend development, backend service architecture, database logging, and real-time analytics — all fully deployed and operational.
Jokes are sourced from the JokeAPI v2.
- Mobile App: Android (Java), Material Design 3
- Backend Service: Java Servlet (Apache Tomcat 10), Docker, GitHub Codespaces
- Database: MongoDB Atlas (Cloud-hosted)
- Dashboard: JSP, Chart.js, Bootstrap 5
- Libraries: Gson (for JSON parsing)
[Android App] → [Custom Servlet (Tomcat)] → [JokeAPI]
↓
[MongoDB Atlas]
↓
[JSP Dashboard Analytics]
- Android App: Collects user preferences and fetches jokes.
- Custom Servlet: Interfaces with JokeAPI, handles responses, logs requests.
- MongoDB Atlas: Stores all interaction data for analytics.
- JSP Dashboard: Visualizes usage statistics and operational logs.
- Category Selection: Multiple joke categories (e.g., Programming, Spooky).
- Language Selection: Choose joke language (English, Spanish, etc.).
- Keyword Filtering: Search jokes by optional keywords.
- Modern UI: Material3 styled cards and inputs.
- Robust Error Handling: Friendly fallback screens for network/API issues.
- Dynamic Query Construction: Builds requests to JokeAPI based on user input.
- Validation and Defaults: Applies safe defaults when needed.
- Comprehensive Logging: Captures complete transaction data.
- Structured Responses: Normalizes JokeAPI outputs for Android parsing.
- Today's Total Requests
- Language Distribution Pie Chart
- Daily Request Trends
- Popular Joke Categories
- Top Search Keywords
- Top 5 Frequent Joke IDs
- Paginated Log View
Responsive design using JSP, Bootstrap 5, and Chart.js.
- Android Testing: Medium Phone Emulator (API 36)
- Backend Hosting: GitHub Codespaces, Apache Tomcat 10 (Dockerized)
- Database: MongoDB Atlas, multi-sharded cluster
Endpoints:
- Joke Retrieval:
/joke - Analytics Dashboard:
/dashboard.jsp
Docker Base Image:
FROM tomcat:10.1.15-jdk17-temurinThe idea behind JokeApp is simple yet meaningful:
Give people a quick laugh amidst hard work — a "light moment" inspired by the CMU spirit.
Through this project, I explored real-world challenges in mobile/web integration, cloud data management, error resilience, and operational analytics.
Thanks for visiting! Hope this little app brings a smile to your day! 😄

