Passport of Play - Leaderboard & Score System | AI-led UX Design

Organisation
Museum of Solutions
Team
Visitor Experience
Role
UX Strategy & Citizen Development
Apps Built:
  • PoP Admin App (Data Entry Application)

  • PoP Live Leaderboard App (Leaderboard Display Web App)

AI Collaborators:
  • ChatGPT (OpenAI)

  • Deepseek-R1 (via OpenWebUI, locally hosted)

Overview

This project began with a clear and ambitious goal: to create a seamless, real-time leaderboard system for the Museum of Solutions’ Passport of Play initiative. The objective was to capture and visualize the scores of participating children as they engaged in various learning activities and challenges throughout the summer.

The system needed to be highly usable for non-technical museum staff, visually clean for public display, and structurally robust to ensure fair and accurate rankings. Rather than building everything manually, I chose to take a collaborative approach—partnering with two advanced AI models to co-design and co-develop the system.

Tech Stack & Tools

  1. Python (Tkinter, Gspread, Pandas)
    Built a desktop data entry app with Tkinter for UI, Gspread for Google Sheets integration, and Pandas for data processing.

  2. Flask (Python Web Framework)
    Developed a live leaderboard web interface with dynamic HTML and auto-refreshing data.

  3. Google Sheets
    Used as a real-time, editable backend for data storage, scoring, and change logging.

  4. PyInstaller
    Packaged both the app and server into .exe files for easy deployment.

  5. ChatGPT & Deepseek-R1
    Used for architecture planning, debugging, and optimizing code—Deepseek-R1 hosted locally via OpenWebUI.

  6. VS Code
    Primary IDE for development, testing, and live AI-assisted refactoring.

The Process

Project Genesis

The project began with a goal that felt humble on the surface: create a real-time leaderboard display and a complementary data entry interface for a summer learning experience at the Museum of Solutions (MuSo).

As a designer, I wasn’t just solving for UI aesthetics or UX efficiency — I was building tools that had to be used daily by non-technical staff and real-time by visitors.

Passport of Play: Scoring System

The Passport of Play is a gamified experience designed for children visiting the Museum of Solutions during the Summer Festival. As children were to engage with different exhibits and completed activities, they would earn color-coded tokens based on the nature or difficulty of the challenge.

Each token color carried a specific point value:

Token

Point

Red

10 points

Yellow

50 points

Green

100 points

Blue

200 points

At the end of their visit, a staff member would count the tokens collected by the child and enter the totals into the PoP Admin App. The app automatically computed the total score using the formula:

Score = (Red × 10) + (Yellow × 50) + (Green × 100) + (Blue × 200)

This score was to be logged in real-time to a connected Google Sheet. The leaderboard system then ranked all participants accordingly. If a child returned later in the week and earned more tokens, only the additional points earned during that visit were considered for that week’s leaderboard, while their overall score remained cumulative.

This approach created a playful yet fair competition, blending learning and reward in a way that encouraged repeat visits and deep engagement.

Phase 1: Choosing the Architecture

I started by consulting ChatGPT on possible architectures. It offered a range of paths: Firebase, AppScript, Python-Google Sheets, Airtable, and more. After reviewing all options through the lens of usability, privacy, and control, we selected a no-database solution using Google Sheets and Python.

This allowed non-technical staff to monitor or even manually adjust entries in the backend without requiring a CMS or external tool. It also aligned with the museum’s need for transparency and flexibility.

System Map

Phase 2: Building the Admin App

The PoP Admin App v2.0 was developed using Python’s Tkinter library. ChatGPT helped bootstrap the interface with login systems, search capability, and conditional flows depending on whether a Passport ID already existed.

LeaderboardAdminApp/
├── main.py
├── PoPServiceKey.json
├── logo.png
├── ico.ico

Inputs

Actions

Passport ID

Search ID

Player Name

Submit Entry

Age, Contact

Delete Entry

Tokens (red, yellow, green, blue)

Modify (checkbox)

Over time, we added:

  • Username-based authentication referencing a separate protected sheet

  • Auto-generated Passport ID field (MUSO00000 format) with input restrictions

  • Dynamic field locking after lookup

  • Search, create, modify, and delete functionality

  • Live score preview based on four token types (Red, Yellow, Green, Blue)

  • Formula injection into the Score cell for dynamic Google Sheet calculations

  • Arithmetic-friendly token fields (supporting entries like 10+5)

  • Field validation and error handling

  • A scrolling UI with stylized branding, Work Sans fonts, and logo integration

  • Action logging in a Changelog tab, storing action type, timestamp, device name, username, and before/after value changes

  • A launcher .exe for non-technical usage with embedded icon and browser launch shortcut

Phase 3: Building the Live Leaderboard App

Once the data was reliably being stored and logged, I built the complementary Flask-based web app that would display a live, updating leaderboard.

LiveLeaderboardApp/
├── main.py
├── templates/
│   ├── index.html
├── static/
│   ├── logo.png
│   ├── icon.ico

Features included:

  • Automatic data fetch from a published Google Sheets CSV link

  • Sorting participants by score in descending order

  • Formatting for top three positions with color and font emphasis

  • Detection of tied scores and visual merging of names (e.g., Riya [TIED] Jiya)

  • Combined Passport IDs for tied players

  • Responsive table with alternate column layouts for longer lists

  • Dropdown selector to view leaderboard by week

  • Automatic refresh every 15 seconds

  • Timestamp showing last refresh

  • Graceful fallbacks if data is missing

  • A .exe launcher with icon and GUI window that makes the web app instantly accessible

Each of these features was co-built with the AI models, but critically, I drove the refinement process. ChatGPT would provide drafts and logic. I would test, identify flaws, and when needed, switch over to Deepseek-R1 to reframe the approach or clean the logic.

Debugging the Agent

Let’s be honest — the AIs made many mistakes:

  • They forgot to lock the Passport ID field.

  • They skipped score calculation or applied the wrong formula.

  • They dropped fields from the log entirely.

  • They broke the GUI layout while updating visual spacing.

But, through trial and error, I caught it. Every time.

And like true collaborators, ChatGPT and DeepSeek adapted instantly.

Results

By the end, I had delivered two fully functional applications:

PoP Admin App v2.0

  • Secure credential system

  • Google Sheets-based backend

  • Token-based live score computation

  • Intuitive, scrollable interface

  • .exe packaging for deployment

  • Full-fledged Changelog recording

PoP Live Leaderboard v2.0

  • Web-based live leaderboard

  • Tied score merging

  • Week-based filtering

  • Refresh and timestamp display

  • Embedded styling and responsive layout

  • Packaged as .exe with GUI launcher

💡Both apps now run at the Museum of Solutions during their Summer Trip or the Passport of Play, powering an entire visitor engagement system.

Reflection

This project was more than code. It was about designing systems with intelligence—human and artificial. It was about vibe-based design: understanding user behaviors, creating aesthetic feedback loops, and orchestrating invisible automation to feel intuitive and empowering.

With ChatGPT and Deepseek-R1 as my co-creators, I brought these apps to life faster, deeper, and more reliably than I could have done solo. Probably, It could've taken me months to learn to code perfectly and even then fail to build reliably. But the fact that these AI's at my disposal were able to write codes for the desired functions so quickly made us a great team.

The future looks bright and dark both for tech people and I believe I am on the former side.

Note on Confidential Work

Note on Confidential Work

Note on Confidential Work

Due to confidentiality agreements, I’m unable to publicly share the full details or visuals of this projects. However, I’d be happy to discuss those better in a one-on-one conversation or interview setting.
Connect with me →
© aman. 2025
Connect with me →
© aman. 2025
Connect with me →
© aman. 2025