
Project Overview:
For this project, I developed a responsive web application designed to display Detroit Lions player performance data based on user-selected position groups.

Objective:
The goal was to create a clean, interactive web app that accepts user input and updates the UI accordingly. The project required separating structured data from HTML, using tools like JavaScript objects, responsive CSS with REM units, and valid semantic HTML. It also had to function smoothly across all screen sizes and include thoughtful design elements like a site icon and accessible navigation.

My Approach:
I started by wireframing the layout and mapping out the data structure. From there, I built a local JavaScript object to hold player stats and used DOM manipulation to dynamically generate content based on the user’s selection from a dropdown menu.
To keep things clean and responsive, I styled the interface using Flexbox and scaled all spacing and typography with REM units. Every UI element — from the dropdown input to the player stat cards — was designed to adapt to smaller screens. I also incorporated accessibility-friendly HTML and ensured performance by minimizing unnecessary assets.
The result is a lightweight, functional web app that showcases player stats clearly and efficiently based on user interaction.
Wireframe Mapping
Before diving into development, I created a wireframe to plan the layout and structure of the interface. This helped me visualize how users would interact with the dropdown menu and where the dynamic stats would be displayed. It also ensured a clean, logical flow on both desktop and mobile, guiding decisions around spacing, hierarchy, and responsiveness before writing any code.

Pseudocode
Before jumping into the full coding process, I created pseudocode to help map out the project’s structure and logic. This allowed me to plan how user input would interact with the data and how the UI would update dynamically, helping guide both the design and development phases.
Initialize data
Create an object called playerStats
Store arrays of player info grouped by position (running back, quarterback, wide receiver)
Setup page elements
Get reference to the dropdown menu (positionSelect)
Get reference to the display area (statsDisplay)
Handle user input
When the user selects a position:
Get the selected position value
Call a function to render stats for that position
Render stats
Define a function renderStats(position):
Clear the stats display area
If the position exists in playerStats:
Generate HTML content for each player in the selected group
For each player:
Display name, jersey number, and position-specific stats
Insert the generated content into the stats display container
Initial state
Set the display area to be empty on page load
Styling and layout
Use CSS to:
- Center content with Flexbox
- Style dropdown and player cards
- Ensure responsive design using REM units
Final Interactive Display
HTML Code
The HTML provides the foundational structure for the app. I used semantic elements like <head>
, <body>
, <select>
, and <div>
to organize the content clearly and accessibly. The <select>
dropdown allows users to choose a position group, while a dedicated <div>
(#statsDisplay
) acts as the dynamic content area where player stats are rendered based on user input.
I also linked an external stylesheet for clean separation of structure and style, added a favicon for visual branding, and ensured proper mobile scaling with the viewport meta tag. These choices support usability, maintainability, and performance across devices.
JavaScript Code
The JavaScript powers the app’s interactivity and dynamic content. I used a local JavaScript object (playerStats
) to store structured player data, organized by position group. When a user selects a position from the dropdown, an event listener triggers the renderStats()
function, which updates the UI based on the selected group.
The script uses DOM manipulation to generate and insert HTML content dynamically. Conditional logic ensures the right stats are displayed for each position, and the use of functions like renderPositionGroup()
keeps the code modular and organized. This approach demonstrates how user input can control the interface through real-time updates.
CSS Code
The CSS was designed to create a clean, responsive layout that adapts well to different screen sizes. I used Flexbox to center and align elements both vertically and horizontally, making the app functional on smaller screens. All padding, margins, and font sizes use REM units to ensure scalability and accessibility across devices.
Key styling strategies include:
Consistent component styling for dropdowns and player cards to enhance usability and visual hierarchy
Box shadows, borders, and colors to separate content and improve readability
A responsive container width and clear visual feedback (e.g.,
:hover
,:focus
states) for better user interactionA light, readable color palette aligned with the Detroit Lions’ branding