Skip to content

Instantly share code, notes, and snippets.

@imjasonh
Created December 10, 2025 17:42
Show Gist options
  • Select an option

  • Save imjasonh/7cf3de3c7ee92dbb6eb9208c9368bed4 to your computer and use it in GitHub Desktop.

Select an option

Save imjasonh/7cf3de3c7ee92dbb6eb9208c9368bed4 to your computer and use it in GitHub Desktop.
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Bingo Card</title>
<style>
body {
font-family: Arial, sans-serif;
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh;
margin: 0;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
}
.container {
background: white;
padding: 2rem;
border-radius: 1rem;
box-shadow: 0 10px 40px rgba(0, 0, 0, 0.3);
}
h1 {
text-align: center;
color: #333;
margin-top: 0;
}
.bingo-card {
display: grid;
grid-template-columns: repeat(5, 1fr);
gap: 0;
border: 3px solid #333;
margin: 1rem 0;
}
.bingo-cell {
aspect-ratio: 1;
display: flex;
align-items: center;
justify-content: center;
text-align: center;
padding: 0.5rem;
border: 1px solid #666;
cursor: pointer;
transition: background-color 0.3s;
font-size: 0.9rem;
background: white;
min-height: 80px;
}
.bingo-cell:hover:not(.free) {
background-color: #f0f0f0;
}
.bingo-cell.marked {
background-color: #4caf50;
color: white;
}
.bingo-cell.free {
background-color: #ff9800;
color: white;
font-weight: bold;
cursor: default;
}
.footer {
text-align: center;
margin-top: 1rem;
color: #666;
font-size: 0.9rem;
}
.controls {
text-align: center;
margin-top: 1rem;
}
button {
background-color: #667eea;
color: white;
border: none;
padding: 0.5rem 1rem;
border-radius: 0.5rem;
cursor: pointer;
font-size: 1rem;
margin: 0 0.5rem;
}
button:hover {
background-color: #5568d3;
}
</style>
</head>
<body>
<div class="container">
<h1>๐ŸŽ‰ Bingo Card ๐ŸŽ‰</h1>
<div class="bingo-card" id="bingoCard"></div>
<div class="controls">
<button onclick="generateCard()">New Card</button>
</div>
<div class="footer">
Click cells to mark them. Get 5 in a row to win!
</div>
</div>
<script>
// Define your bingo items here
const bingoItems = [
"work streams",
"fiscal year",
"strategy doc",
"stakeholders",
"below the cut line",
"synergy",
"circle back",
"deep dive",
"bandwidth",
"touch base",
"low-hanging fruit",
"move the needle",
"pivot",
"leverage",
"actionable insights",
"scalable solution",
"value-added",
"game changer",
"best practices",
"crawl, walk, run",
"on the same page",
"drill down",
"take this offline",
"big picture",
"win-win",
];
function shuffle(array) {
const newArray = [...array];
for (let i = newArray.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
[newArray[i], newArray[j]] = [newArray[j], newArray[i]];
}
return newArray;
}
function generateCard() {
const card = document.getElementById("bingoCard");
card.innerHTML = "";
const shuffled = shuffle(bingoItems);
const selected = shuffled.slice(0, 24);
// Create 5x5 grid with FREE in the middle (index 12)
for (let i = 0; i < 25; i++) {
const cell = document.createElement("div");
cell.className = "bingo-cell";
if (i === 12) {
cell.textContent = "FREE";
cell.classList.add("free");
} else {
const itemIndex = i < 12 ? i : i - 1;
cell.textContent = selected[itemIndex];
cell.onclick = function () {
this.classList.toggle("marked");
};
}
card.appendChild(cell);
}
}
// Generate initial card on page load
generateCard();
</script>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment