🎯

Welcome to Bingo Card Generator!

First time here? Perfect!

In just 2 minutes, you'll create your first custom bingo card!

No design experience needed!

πŸ€” What Is Bingo Card Generator?

Think of a creative puzzle maker - that's our Bingo Card Generator!

Transform any topic into engaging, interactive bingo cards in seconds!

πŸŽ‰
Party Games
Create custom bingo cards for birthday parties, weddings, and celebrations
πŸ“š
Education
Make learning fun with vocabulary, math facts, or science concepts
πŸ‘₯
Team Building
Break the ice with company events and team-building activities
🏠
Family Fun
Create memorable game nights with personalized family bingo
🎭
Events
Engage audiences at conferences, workshops, and social gatherings
🎨
Creative Projects
Design unique bingo cards for any theme or special occasion

🎯 Bingo Card Generator

Create custom bingo cards instantly! Perfect for parties, classrooms, team building, and events. Generate unique cards with your own words and phrases.

🟑
Intermediate
More options
πŸ”΄
Expert
Full control

🎯 Quick Start Templates

πŸŽ‰
Birthday Party
Fun party activities
πŸ“š
Classroom
Educational vocabulary
πŸ‘₯
Ice Breaker
Team building fun
πŸŽ„
Holiday
Seasonal themes

✏️ Create Your Bingo Card

πŸ’‘ Tip: You need at least 24 items (plus FREE space = 25 total)
BINGO
Click
"Generate"
to
create
your
custom
bingo
card
with
your
own
words
FREE
and
phrases
Perfect
for
parties
and
events
Start
by
choosing
a
template!

πŸŽ‰ Planning a Bingo Party or Event?

Book the perfect venue or plan your celebration getaway with the best deals worldwide!

✨ Smart Nation's Core Infrastructure: WIA Pin Code ✨

DroneΒ·Robot delivery, autonomous driving, emergency rescue and more - Experience the future in 30 days, completely free for your nation!

Learn More About WIA Pin Code
`); printWindow.document.close(); printWindow.print(); trackEvent('card_printed'); OnboardingManager.unlockAchievement('printer_pro', 'πŸ–¨οΈ Print Pro - Printed a bingo card!'); } // Export cards as PDF (placeholder) function exportCards() { showNotification('PDF export feature coming soon!', 'warning'); OnboardingManager.unlockAchievement('export_explorer', 'πŸ“„ Export Explorer - Tried advanced features!'); } // Set difficulty function setDifficulty(level) { OnboardingManager.setDifficulty(level); } // Update font preview function updateFontPreview(value) { document.getElementById('fontPreview').textContent = value; } // Start tutorial function startTutorial() { OnboardingManager.startTutorial(); } // Skip onboarding function skipOnboarding() { OnboardingManager.skipOnboarding(); } // Skip tutorial function skipTutorial() { OnboardingManager.skipTutorial(); } // Next tutorial step function nextTutorialStep() { OnboardingManager.nextTutorialStep(); } // ========== UTILITY FUNCTIONS ========== // Shuffle array function shuffleArray(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; } // Show notification toast function showNotification(message, type = 'success') { const toast = document.createElement('div'); toast.className = `toast ${type}`; toast.textContent = message; document.body.appendChild(toast); setTimeout(() => { toast.remove(); }, 3000); } // Show OTA section (dynamic) function showOTA() { const otaContainer = document.getElementById('otaContainer'); if (otaContainer && (otaContainer.style.display === 'none' || !otaContainer.style.display)) { otaContainer.style.display = 'block'; // Attention-grabbing pulse effect setTimeout(() => { const otaHeader = document.querySelector('.ota-header h3'); if (otaHeader) { otaHeader.style.animation = 'pulse 1s ease-in-out'; } }, 100); } } // Analytics tracking function trackEvent(eventName, data = {}) { if (typeof gtag !== 'undefined') { gtag('event', eventName, { 'event_category': TOOL_CONFIG.category, 'event_label': TOOL_CONFIG.name, ...data }); } } // ========== AI ASSISTANT FUNCTIONS ========== // AI λͺ¨λ‹¬ μ—΄κΈ° function openAIModal() { const modal = document.getElementById('aiModal'); modal.classList.add('show'); // ν˜„μž¬ μƒνƒœμ— 따라 μ μ ˆν•œ ν™”λ©΄ ν‘œμ‹œ if (aiModalState.apiKey && aiModalState.currentView === 'gemini') { showGeminiChat(); } else { showAISelector(); } updateAPIKeyStatus(); } // AI λͺ¨λ‹¬ λ‹«κΈ° function closeAIModal() { const modal = document.getElementById('aiModal'); modal.classList.remove('show'); // 300ms ν›„ μƒνƒœ 리셋 (μ• λ‹ˆλ©”μ΄μ…˜ μ™„λ£Œ ν›„) setTimeout(() => { aiModalState.currentView = 'selector'; showAISelector(); }, 300); } // AI 선택 ν™”λ©΄ ν‘œμ‹œ function showAISelector() { document.getElementById('aiModalTitle').textContent = 'Choose Your AI Assistant'; document.getElementById('aiSelector').style.display = 'flex'; document.getElementById('geminiChat').style.display = 'none'; document.getElementById('apiKeySetup').style.display = 'none'; aiModalState.currentView = 'selector'; } // Gemini μ±„νŒ… ν™”λ©΄ ν‘œμ‹œ function showGeminiChat() { document.getElementById('aiModalTitle').innerHTML = '✨ Gemini AI Assistant'; document.getElementById('aiSelector').style.display = 'none'; document.getElementById('geminiChat').style.display = 'flex'; document.getElementById('apiKeySetup').style.display = 'none'; aiModalState.currentView = 'gemini'; // 초기 λ©”μ‹œμ§€κ°€ μ—†μœΌλ©΄ μΆ”κ°€ const chatMessages = document.getElementById('chatMessages'); if (!chatMessages.innerHTML.trim()) { addMessage('assistant', `Hello! I can help you with: β€’ Creative bingo card ideas and themes β€’ Educational bingo topics for classrooms β€’ Party and event bingo suggestions β€’ Tips for making engaging bingo games β€’ Custom word lists for any occasion What kind of bingo card are you creating?`); } } // API ν‚€ μ„€μ • ν™”λ©΄ ν‘œμ‹œ function showAPIKeySetup() { document.getElementById('aiModalTitle').textContent = 'Setup Gemini API'; document.getElementById('aiSelector').style.display = 'none'; document.getElementById('geminiChat').style.display = 'none'; document.getElementById('apiKeySetup').style.display = 'block'; aiModalState.currentView = 'setup'; } // AI 선택 처리 function selectAI(aiType) { switch(aiType) { case 'chatgpt': const toolContext = `I need help with ${TOOL_CONFIG.name}. I want to create engaging bingo cards for parties, education, or events. Can you help me brainstorm creative themes, word lists, and game variations?`; const chatUrl = `https://chat.openai.com/?q=${encodeURIComponent(toolContext)}`; window.open(chatUrl, '_blank'); closeAIModal(); trackEvent('ai_selection', { ai_type: 'chatgpt' }); break; case 'claude': const claudeContext = `I need help with ${TOOL_CONFIG.name}. I want to create engaging bingo cards for educational purposes, parties, or team building. Can you help me develop creative themes, comprehensive word lists, and effective game strategies?`; const claudeUrl = `https://claude.ai/chat?q=${encodeURIComponent(claudeContext)}`; window.open(claudeUrl, '_blank'); closeAIModal(); trackEvent('ai_selection', { ai_type: 'claude' }); break; case 'gemini': if (!aiModalState.apiKey) { showAPIKeySetup(); } else { showGeminiChat(); } trackEvent('ai_selection', { ai_type: 'gemini' }); break; } } // API ν‚€ μ €μž₯ function saveGeminiApiKey() { const apiKey = document.getElementById('geminiApiKeyInput').value.trim(); if (apiKey) { localStorage.setItem('geminiApiKey', apiKey); aiModalState.apiKey = apiKey; showGeminiChat(); updateAPIKeyStatus(); } else { alert('Please enter a valid API key'); } } // API ν‚€ μƒνƒœ μ—…λ°μ΄νŠΈ function updateAPIKeyStatus() { const statusEl = document.getElementById('apiKeyStatus'); if (aiModalState.apiKey) { statusEl.innerHTML = 'Change API Key'; } else { statusEl.textContent = 'No API key set'; } } // μ±„νŒ… λ©”μ‹œμ§€ μΆ”κ°€ function addMessage(type, content) { const chatMessages = document.getElementById('chatMessages'); const messageDiv = document.createElement('div'); messageDiv.className = `message ${type}`; if (type === 'user') { messageDiv.innerHTML = `You: ${content}`; } else { messageDiv.innerHTML = `✨ Gemini:
${content.replace(/\n/g, '
')}`; } chatMessages.appendChild(messageDiv); chatMessages.scrollTop = chatMessages.scrollHeight; } // Gemini에 λ©”μ‹œμ§€ 전솑 async function sendToGemini() { const input = document.getElementById('geminiInput'); const message = input.value.trim(); if (!message) return; // μ‚¬μš©μž λ©”μ‹œμ§€ μΆ”κ°€ addMessage('user', message); input.value = ''; // λ‘œλ”© ν‘œμ‹œ const loadingMsg = document.createElement('div'); loadingMsg.className = 'message assistant'; loadingMsg.innerHTML = '✨ Gemini:
Thinking...'; loadingMsg.id = 'loading-message'; document.getElementById('chatMessages').appendChild(loadingMsg); try { const response = await fetch(`https://generativelanguage.googleapis.com/v1beta/models/gemini-pro:generateContent?key=${aiModalState.apiKey}`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ contents: [{ parts: [{ text: `Context: User is using a Bingo Card Generator tool to create custom bingo cards for various purposes like parties, education, team building, and events. They can create cards with custom words, choose different themes, and generate multiple variations. Current user context: They may be looking for creative ideas, word suggestions, themes, or help with game variations. User question: ${message} Please provide helpful, creative, and specific suggestions related to bingo cards and games.` }] }], generationConfig: { temperature: 0.7, maxOutputTokens: 1000 } }) }); const data = await response.json(); // λ‘œλ”© λ©”μ‹œμ§€ 제거 document.getElementById('loading-message').remove(); if (data.candidates && data.candidates[0] && data.candidates[0].content) { const reply = data.candidates[0].content.parts[0].text; addMessage('assistant', reply); } else { addMessage('assistant', 'Sorry, I could not generate a response. Please try again.'); } } catch (error) { // λ‘œλ”© λ©”μ‹œμ§€ 제거 document.getElementById('loading-message')?.remove(); if (error.message.includes('API key')) { addMessage('error', 'Invalid API key. Please check your API key and try again.'); showAPIKeySetup(); } else { addMessage('error', 'Failed to connect to Gemini. Please check your internet connection and try again.'); } } } // ========== DYNAMIC TOOL COUNT ========== // Update tool count dynamically async function updateToolCount() { try { const response = await fetch('/api/tool-count.php'); const data = await response.json(); // Update dynamic tools description document.querySelectorAll('.dynamic-tools-count').forEach(el => { el.textContent = `${data.count}+ free online tools in 211 languages. No signup, no fees, just tools that work.`; }); // Update "All X+ Tools" links document.querySelectorAll('.dynamic-count').forEach(el => { const prefix = el.getAttribute('data-text') || ''; const suffix = el.getAttribute('data-suffix') || ''; const icon = el.textContent.split(' ')[0] || ''; el.textContent = `${icon} ${prefix} ${data.count}+ ${suffix}`; }); } catch (error) { // Fallback: use current actual count from server const fallbackCount = 333; document.querySelectorAll('.dynamic-tools-count').forEach(el => { el.textContent = `${fallbackCount}+ free online tools in 211 languages. No signup, no fees, just tools that work.`; }); document.querySelectorAll('.dynamic-count').forEach(el => { const prefix = el.getAttribute('data-text') || ''; const suffix = el.getAttribute('data-suffix') || ''; const icon = el.textContent.split(' ')[0] || ''; el.textContent = `${icon} ${prefix} ${fallbackCount}+ ${suffix}`; }); console.log('Tool count API not available, using current count:', fallbackCount); } } // Update current year dynamically function updateCurrentYear() { const currentYear = new Date().getFullYear(); document.querySelectorAll('.current-year').forEach(el => { el.textContent = currentYear; }); } // ========== EVENT LISTENERS ========== document.addEventListener('DOMContentLoaded', function() { // Initialize onboarding system OnboardingManager.init(); // Load saved difficulty const savedDifficulty = localStorage.getItem('bingo_generator_difficulty'); if (savedDifficulty) { OnboardingManager.setDifficulty(savedDifficulty); } // Clear errors on input document.getElementById('bingoWords').addEventListener('input', function() { // Auto-resize textarea this.style.height = 'auto'; this.style.height = this.scrollHeight + 'px'; }); // Enter key support for Gemini chat document.getElementById('geminiInput').addEventListener('keypress', function(e) { if (e.key === 'Enter') { sendToGemini(); } }); // AI λ²„νŠΌ 이벀트 document.getElementById('aiBtn').addEventListener('click', openAIModal); // λͺ¨λ‹¬ μ™ΈλΆ€ ν΄λ¦­μ‹œ λ‹«κΈ° document.getElementById('aiModal').addEventListener('click', function(e) { if (e.target === this) { closeAIModal(); } }); // ESC ν‚€λ‘œ λͺ¨λ‹¬ λ‹«κΈ° document.addEventListener('keydown', function(e) { if (e.key === 'Escape') { closeAIModal(); OnboardingManager.skipTutorial(); } }); // 초기 μƒνƒœ μ—…λ°μ΄νŠΈ updateAPIKeyStatus(); updateCurrentYear(); updateToolCount(); }); // Track WIA Pin Code clicks for analytics document.querySelectorAll('a[href*="wia"]').forEach(link => { link.addEventListener('click', function() { trackEvent('wia_link_click', { link: link.textContent }); }); }); // ========== ANALYTICS ========== // Google Analytics window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-XXXXXXXXX'); // Track page view trackEvent('page_view', { tool: TOOL_CONFIG.name, category: TOOL_CONFIG.category }); -option active" data-difficulty="beginner" onclick="setDifficulty('beginner')"> 🟒
Beginner
Quick & simple