LukasBe's picture
Add 3 files
66e206e verified
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Game Development Framework</title>
<script src="https://cdn.tailwindcss.com"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
<style>
.level-card {
transition: all 0.3s ease;
}
.level-card:hover {
transform: translateY(-5px);
box-shadow: 0 10px 25px rgba(0, 0, 0, 0.1);
}
.progress-bar {
height: 6px;
border-radius: 3px;
}
.question-card {
transition: all 0.3s ease;
}
.question-card:hover {
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);
}
.sidebar {
transition: all 0.3s ease;
}
@media (max-width: 768px) {
.sidebar {
transform: translateX(-100%);
position: absolute;
z-index: 10;
}
.sidebar.open {
transform: translateX(0);
}
}
</style>
</head>
<body class="bg-gray-50 font-sans">
<!-- Mobile Menu Button -->
<div class="md:hidden fixed top-4 left-4 z-20">
<button id="menuToggle" class="p-2 rounded-lg bg-indigo-600 text-white shadow-lg">
<i class="fas fa-bars"></i>
</button>
</div>
<!-- Sidebar -->
<div id="sidebar" class="sidebar w-64 bg-white h-screen fixed shadow-lg p-4">
<div class="flex items-center mb-8">
<i class="fas fa-gamepad text-indigo-600 text-2xl mr-3"></i>
<h1 class="text-xl font-bold text-gray-800">Game Framework</h1>
</div>
<div class="mb-6">
<h3 class="text-xs uppercase font-semibold text-gray-500 mb-2">Project</h3>
<div class="flex items-center bg-indigo-50 rounded-lg p-3">
<div class="w-10 h-10 rounded-full bg-indigo-100 flex items-center justify-center mr-3">
<i class="fas fa-mobile-alt text-indigo-600"></i>
</div>
<div>
<p class="font-medium text-gray-800">Casual Match-3</p>
<p class="text-xs text-gray-500">Version 1.0.0</p>
</div>
</div>
</div>
<div class="mb-6">
<h3 class="text-xs uppercase font-semibold text-gray-500 mb-2">Framework Levels</h3>
<ul id="levelNav">
<li class="mb-1">
<a href="#" data-level="l1" class="level-link flex items-center p-2 rounded-lg hover:bg-indigo-50 text-gray-700">
<span class="w-5 h-5 rounded-full bg-indigo-100 text-indigo-600 text-xs flex items-center justify-center mr-3">1</span>
<span>Vision & Purpose</span>
</a>
</li>
<li class="mb-1">
<a href="#" data-level="l2" class="level-link flex items-center p-2 rounded-lg hover:bg-indigo-50 text-gray-700">
<span class="w-5 h-5 rounded-full bg-indigo-100 text-indigo-600 text-xs flex items-center justify-center mr-3">2</span>
<span>Game Concept</span>
</a>
</li>
<li class="mb-1">
<a href="#" data-level="l3" class="level-link flex items-center p-2 rounded-lg hover:bg-indigo-50 text-gray-700">
<span class="w-5 h-5 rounded-full bg-indigo-100 text-indigo-600 text-xs flex items-center justify-center mr-3">3</span>
<span>Specification</span>
</a>
</li>
<li class="mb-1">
<a href="#" data-level="l4" class="level-link flex items-center p-2 rounded-lg hover:bg-indigo-50 text-gray-700">
<span class="w-5 h-5 rounded-full bg-indigo-100 text-indigo-600 text-xs flex items-center justify-center mr-3">4</span>
<span>Game Architecture</span>
</a>
</li>
<li class="mb-1">
<a href="#" data-level="l5" class="level-link flex items-center p-2 rounded-lg hover:bg-indigo-50 text-gray-700">
<span class="w-5 h-5 rounded-full bg-indigo-100 text-indigo-600 text-xs flex items-center justify-center mr-3">5</span>
<span>Tech Design</span>
</a>
</li>
<li class="mb-1">
<a href="#" data-level="l6" class="level-link flex items-center p-2 rounded-lg hover:bg-indigo-50 text-gray-700">
<span class="w-5 h-5 rounded-full bg-indigo-100 text-indigo-600 text-xs flex items-center justify-center mr-3">6</span>
<span>Implementation</span>
</a>
</li>
<li class="mb-1">
<a href="#" data-level="l7" class="level-link flex items-center p-2 rounded-lg hover:bg-indigo-50 text-gray-700">
<span class="w-5 h-5 rounded-full bg-indigo-100 text-indigo-600 text-xs flex items-center justify-center mr-3">7</span>
<span>Deployment & Live Ops</span>
</a>
</li>
</ul>
</div>
<div class="absolute bottom-4 left-4 right-4">
<div class="bg-indigo-50 rounded-lg p-3">
<div class="flex items-center mb-2">
<div class="w-8 h-8 rounded-full bg-indigo-100 flex items-center justify-center mr-2">
<i class="fas fa-user text-indigo-600 text-sm"></i>
</div>
<p class="font-medium text-gray-800">Dev Team</p>
</div>
<button class="w-full py-2 bg-indigo-600 text-white rounded-lg text-sm font-medium hover:bg-indigo-700 transition">
<i class="fas fa-sign-out-alt mr-1"></i> Logout
</button>
</div>
</div>
</div>
<!-- Main Content -->
<div class="md:ml-64 p-6">
<div class="max-w-6xl mx-auto">
<!-- Header -->
<div class="flex justify-between items-center mb-8">
<div>
<h1 id="currentLevelTitle" class="text-2xl font-bold text-gray-800">Game Development Framework</h1>
<p id="currentLevelDesc" class="text-gray-600">Select a framework level to begin</p>
</div>
<div class="flex space-x-3">
<button class="px-4 py-2 bg-white border border-gray-200 rounded-lg text-gray-700 hover:bg-gray-50 flex items-center">
<i class="fas fa-search mr-2 text-gray-500"></i> Search
</button>
<button class="px-4 py-2 bg-indigo-600 text-white rounded-lg hover:bg-indigo-700 flex items-center">
<i class="fas fa-plus mr-2"></i> Add Note
</button>
</div>
</div>
<!-- Dashboard Cards -->
<div id="dashboardView" class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6 mb-8">
<div class="level-card bg-white p-6 rounded-xl shadow-sm border border-gray-100 cursor-pointer" data-level="l1">
<div class="flex justify-between items-start mb-4">
<div class="w-12 h-12 rounded-lg bg-indigo-100 flex items-center justify-center">
<i class="fas fa-lightbulb text-indigo-600 text-xl"></i>
</div>
<span class="px-2 py-1 bg-green-50 text-green-600 text-xs rounded-full">Active</span>
</div>
<h3 class="font-bold text-lg mb-2 text-gray-800">L1: Vision & Purpose</h3>
<p class="text-gray-600 text-sm mb-4">Define the game's core vision, player needs, and strategic relevance.</p>
<div class="mb-2 flex justify-between text-sm text-gray-500">
<span>Progress</span>
<span>65%</span>
</div>
<div class="w-full bg-gray-200 rounded-full h-2">
<div class="progress-bar bg-indigo-600 rounded-full h-2" style="width: 65%"></div>
</div>
</div>
<div class="level-card bg-white p-6 rounded-xl shadow-sm border border-gray-100 cursor-pointer" data-level="l2">
<div class="flex justify-between items-start mb-4">
<div class="w-12 h-12 rounded-lg bg-blue-100 flex items-center justify-center">
<i class="fas fa-puzzle-piece text-blue-600 text-xl"></i>
</div>
<span class="px-2 py-1 bg-yellow-50 text-yellow-600 text-xs rounded-full">In Progress</span>
</div>
<h3 class="font-bold text-lg mb-2 text-gray-800">L2: Game Concept</h3>
<p class="text-gray-600 text-sm mb-4">Develop the core gameplay loops, player journey, and competitive landscape.</p>
<div class="mb-2 flex justify-between text-sm text-gray-500">
<span>Progress</span>
<span>42%</span>
</div>
<div class="w-full bg-gray-200 rounded-full h-2">
<div class="progress-bar bg-blue-600 rounded-full h-2" style="width: 42%"></div>
</div>
</div>
<div class="level-card bg-white p-6 rounded-xl shadow-sm border border-gray-100 cursor-pointer" data-level="l3">
<div class="flex justify-between items-start mb-4">
<div class="w-12 h-12 rounded-lg bg-purple-100 flex items-center justify-center">
<i class="fas fa-file-alt text-purple-600 text-xl"></i>
</div>
<span class="px-2 py-1 bg-gray-100 text-gray-600 text-xs rounded-full">Pending</span>
</div>
<h3 class="font-bold text-lg mb-2 text-gray-800">L3: Specification</h3>
<p class="text-gray-600 text-sm mb-4">Document detailed game design specifications and requirements.</p>
<div class="mb-2 flex justify-between text-sm text-gray-500">
<span>Progress</span>
<span>18%</span>
</div>
<div class="w-full bg-gray-200 rounded-full h-2">
<div class="progress-bar bg-purple-600 rounded-full h-2" style="width: 18%"></div>
</div>
</div>
<div class="level-card bg-white p-6 rounded-xl shadow-sm border border-gray-100 cursor-pointer" data-level="l4">
<div class="flex justify-between items-start mb-4">
<div class="w-12 h-12 rounded-lg bg-green-100 flex items-center justify-center">
<i class="fas fa-project-diagram text-green-600 text-xl"></i>
</div>
<span class="px-2 py-1 bg-gray-100 text-gray-600 text-xs rounded-full">Pending</span>
</div>
<h3 class="font-bold text-lg mb-2 text-gray-800">L4: Game Architecture</h3>
<p class="text-gray-600 text-sm mb-4">Design the technical architecture and system decomposition.</p>
<div class="mb-2 flex justify-between text-sm text-gray-500">
<span>Progress</span>
<span>5%</span>
</div>
<div class="w-full bg-gray-200 rounded-full h-2">
<div class="progress-bar bg-green-600 rounded-full h-2" style="width: 5%"></div>
</div>
</div>
<div class="level-card bg-white p-6 rounded-xl shadow-sm border border-gray-100 cursor-pointer" data-level="l5">
<div class="flex justify-between items-start mb-4">
<div class="w-12 h-12 rounded-lg bg-red-100 flex items-center justify-center">
<i class="fas fa-code text-red-600 text-xl"></i>
</div>
<span class="px-2 py-1 bg-gray-100 text-gray-600 text-xs rounded-full">Pending</span>
</div>
<h3 class="font-bold text-lg mb-2 text-gray-800">L5: Tech Design</h3>
<p class="text-gray-600 text-sm mb-4">Specify implementation details and tech stack choices.</p>
<div class="mb-2 flex justify-between text-sm text-gray-500">
<span>Progress</span>
<span>0%</span>
</div>
<div class="w-full bg-gray-200 rounded-full h-2">
<div class="progress-bar bg-red-600 rounded-full h-2" style="width: 0%"></div>
</div>
</div>
<div class="level-card bg-white p-6 rounded-xl shadow-sm border border-gray-100 cursor-pointer" data-level="l6">
<div class="flex justify-between items-start mb-4">
<div class="w-12 h-12 rounded-lg bg-yellow-100 flex items-center justify-center">
<i class="fas fa-cogs text-yellow-600 text-xl"></i>
</div>
<span class="px-2 py-1 bg-gray-100 text-gray-600 text-xs rounded-full">Pending</span>
</div>
<h3 class="font-bold text-lg mb-2 text-gray-800">L6: Implementation</h3>
<p class="text-gray-600 text-sm mb-4">Execute on code, art, audio, and design implementation.</p>
<div class="mb-2 flex justify-between text-sm text-gray-500">
<span>Progress</span>
<span>0%</span>
</div>
<div class="w-full bg-gray-200 rounded-full h-2">
<div class="progress-bar bg-yellow-600 rounded-full h-2" style="width: 0%"></div>
</div>
</div>
</div>
<!-- Level Content (Hidden by default) -->
<div id="levelContentView" class="hidden">
<div class="bg-white rounded-xl shadow-sm border border-gray-100 p-6 mb-6">
<div class="flex justify-between items-center mb-6">
<div>
<h2 id="levelTitle" class="text-xl font-bold text-gray-800">Level Title</h2>
<p id="levelSubtitle" class="text-gray-600">Level description</p>
</div>
<button id="backToDashboard" class="px-4 py-2 bg-gray-100 text-gray-700 rounded-lg hover:bg-gray-200 flex items-center">
<i class="fas fa-arrow-left mr-2"></i> Back to Dashboard
</button>
</div>
<div class="mb-6">
<div class="flex items-center mb-4">
<div class="w-8 h-8 rounded-full bg-indigo-100 flex items-center justify-center mr-3">
<i class="fas fa-question text-indigo-600"></i>
</div>
<h3 class="font-semibold text-lg text-gray-800">Key Questions</h3>
</div>
<div id="questionsContainer" class="space-y-4">
<!-- Questions will be dynamically inserted here -->
</div>
</div>
<div class="mb-6">
<div class="flex items-center mb-4">
<div class="w-8 h-8 rounded-full bg-green-100 flex items-center justify-center mr-3">
<i class="fas fa-tasks text-green-600"></i>
</div>
<h3 class="font-semibold text-lg text-gray-800">Action Items</h3>
</div>
<div class="bg-gray-50 rounded-lg p-4">
<div class="flex items-start mb-4">
<input type="checkbox" class="mt-1 mr-3" id="task1">
<label for="task1" class="flex-1">
<p class="font-medium text-gray-800">Create player persona document</p>
<p class="text-sm text-gray-500">Define demographics, psychographics, and play habits</p>
</label>
<span class="px-2 py-1 bg-indigo-50 text-indigo-600 text-xs rounded-full">L1</span>
</div>
<div class="flex items-start mb-4">
<input type="checkbox" class="mt-1 mr-3" id="task2">
<label for="task2" class="flex-1">
<p class="font-medium text-gray-800">Conduct competitive analysis</p>
<p class="text-sm text-gray-500">Review 3 top competitors in the genre</p>
</label>
<span class="px-2 py-1 bg-blue-50 text-blue-600 text-xs rounded-full">L2</span>
</div>
<div class="flex items-start">
<input type="checkbox" class="mt-1 mr-3" id="task3">
<label for="task3" class="flex-1">
<p class="font-medium text-gray-800">Draft core loop diagram</p>
<p class="text-sm text-gray-500">Visualize the primary repeatable actions</p>
</label>
<span class="px-2 py-1 bg-purple-50 text-purple-600 text-xs rounded-full">L3</span>
</div>
</div>
</div>
<div>
<div class="flex items-center mb-4">
<div class="w-8 h-8 rounded-full bg-purple-100 flex items-center justify-center mr-3">
<i class="fas fa-comments text-purple-600"></i>
</div>
<h3 class="font-semibold text-lg text-gray-800">Team Notes</h3>
</div>
<div class="bg-gray-50 rounded-lg p-4">
<div class="flex mb-4">
<div class="w-10 h-10 rounded-full bg-indigo-100 flex items-center justify-center mr-3">
<i class="fas fa-user text-indigo-600"></i>
</div>
<div class="flex-1">
<p class="font-medium text-gray-800">Alex Chen</p>
<p class="text-sm text-gray-600 mb-2">2 hours ago</p>
<p class="text-gray-700 bg-white p-3 rounded-lg">We should focus on the stress-relief aspect for our target audience. Research shows casual players often play to unwind after work.</p>
</div>
</div>
<div class="flex">
<div class="w-10 h-10 rounded-full bg-blue-100 flex items-center justify-center mr-3">
<i class="fas fa-user text-blue-600"></i>
</div>
<div class="flex-1">
<p class="font-medium text-gray-800">Jamie Smith</p>
<p class="text-sm text-gray-600 mb-2">Yesterday</p>
<p class="text-gray-700 bg-white p-3 rounded-lg">The Candy Crush team found that players respond well to daily challenges. We should consider this for retention.</p>
</div>
</div>
</div>
<div class="mt-4 flex">
<input type="text" placeholder="Add a note..." class="flex-1 px-4 py-2 border border-gray-300 rounded-l-lg focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:border-indigo-500">
<button class="px-4 py-2 bg-indigo-600 text-white rounded-r-lg hover:bg-indigo-700">
<i class="fas fa-paper-plane"></i>
</button>
</div>
</div>
</div>
</div>
</div>
</div>
<script>
// Level data
const levels = {
l1: {
title: "L1 — Game Vision & Purpose",
subtitle: "Define the game's core vision, player needs, and strategic relevance",
questions: [
"What player desire are we fulfilling, and for whom?",
"What change in the player's routine or feeling are we trying to create?",
"Why should our studio build this game? Why now?",
"What are we specifically not trying to build? What trade-offs are we making?",
"What does success look like for this game?",
"How is this game distinct, and what are we learning from?"
]
},
l2: {
title: "L2 — Game Concept",
subtitle: "Develop the core gameplay loops, player journey, and competitive landscape",
questions: [
"Who is the player, and what is their situation when they play?",
"What does the player actually do in the game?",
"Why does the player care, and what should they feel?",
"What kind of fun and value are we delivering?",
"How does this game fit within the existing game ecosystem?",
"What is the player's experience across their lifetime with the game?"
]
},
l3: {
title: "L3 — Specification",
subtitle: "Document detailed game design specifications and requirements",
questions: [
"What exactly should the player be able to do, step-by-step?",
"What must the game systems be able to do — and what can be skipped?",
"How should the game look, feel, and respond?",
"What data drives the game, and what rules govern it?",
"What protections and policies must be in place?",
"How do we know a feature is done right and works effectively?"
]
},
l4: {
title: "L4 — Game Architecture",
subtitle: "Design the technical architecture and system decomposition",
questions: [
"How should the game's codebase and systems be logically structured?",
"How does information move through the game systems?",
"How and where is the player's game state managed?",
"How do we protect game integrity and player accounts?",
"How will the game perform under load and on target hardware?",
"How does the game handle crashes, errors, and interruptions gracefully?"
]
},
l5: {
title: "L5 — Tech Design",
subtitle: "Specify implementation details and tech stack choices",
questions: [
"What specific tools, engine versions, SDKs, and platforms are we using — and why?",
"How do game systems and services actually talk to each other?",
"What does our game data look like at rest and in memory?",
"How is the game protected at the code and infrastructure level?",
"How does the game manage state during active gameplay?",
"How do we ensure the game runs smoothly on target devices?"
]
},
l6: {
title: "L6 — Implementation",
subtitle: "Execute on code, art, audio, and design implementation",
questions: [
"Do I fully understand the specific task I'm implementing — and why it matters?",
"What are the precise requirements and constraints for this task?",
"How does this piece fit and interact with the rest of the game?",
"What can go wrong during gameplay, and how is it handled?",
"How do I verify this works correctly and how can issues be diagnosed later?",
"Is this implementation clean, efficient, and easy for others to understand?"
]
},
l7: {
title: "L7 — Deployment & Live Operations",
subtitle: "Manage the live game, updates, and ongoing operations",
questions: [
"How does the game get updated, and how often?",
"What infrastructure supports the build, deployment, and live game?",
"How do we know the live game is healthy and players are engaged?",
"How do we investigate player issues or unexpected behavior?",
"How do we maintain security and compliance post-launch?",
"How do we manage the ongoing operational costs?"
]
}
};
// DOM elements
const menuToggle = document.getElementById('menuToggle');
const sidebar = document.getElementById('sidebar');
const dashboardView = document.getElementById('dashboardView');
const levelContentView = document.getElementById('levelContentView');
const backToDashboard = document.getElementById('backToDashboard');
const levelTitle = document.getElementById('levelTitle');
const levelSubtitle = document.getElementById('levelSubtitle');
const questionsContainer = document.getElementById('questionsContainer');
const currentLevelTitle = document.getElementById('currentLevelTitle');
const currentLevelDesc = document.getElementById('currentLevelDesc');
const levelNavLinks = document.querySelectorAll('.level-link');
const levelCards = document.querySelectorAll('.level-card');
// Toggle mobile menu
menuToggle.addEventListener('click', () => {
sidebar.classList.toggle('open');
});
// Handle level card clicks
levelCards.forEach(card => {
card.addEventListener('click', function() {
const level = this.getAttribute('data-level');
showLevelContent(level);
});
});
// Handle sidebar level links
levelNavLinks.forEach(link => {
link.addEventListener('click', function(e) {
e.preventDefault();
const level = this.getAttribute('data-level');
showLevelContent(level);
// Close mobile menu if open
if (window.innerWidth <= 768) {
sidebar.classList.remove('open');
}
});
});
// Back to dashboard button
backToDashboard.addEventListener('click', function() {
dashboardView.classList.remove('hidden');
levelContentView.classList.add('hidden');
currentLevelTitle.textContent = "Game Development Framework";
currentLevelDesc.textContent = "Select a framework level to begin";
});
// Show level content
function showLevelContent(level) {
const levelData = levels[level];
// Update level title and subtitle
levelTitle.textContent = levelData.title;
levelSubtitle.textContent = levelData.subtitle;
currentLevelTitle.textContent = levelData.title;
currentLevelDesc.textContent = levelData.subtitle;
// Clear and rebuild questions
questionsContainer.innerHTML = '';
levelData.questions.forEach((question, index) => {
const questionCard = document.createElement('div');
questionCard.className = 'question-card bg-white p-4 rounded-lg border border-gray-200';
questionCard.innerHTML = `
<div class="flex items-start">
<span class="w-6 h-6 rounded-full bg-indigo-100 text-indigo-600 text-sm flex items-center justify-center mr-3 mt-1">${index + 1}</span>
<div class="flex-1">
<p class="font-medium text-gray-800 mb-2">${question}</p>
<textarea class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:border-indigo-500" rows="2" placeholder="Add notes..."></textarea>
</div>
</div>
`;
questionsContainer.appendChild(questionCard);
});
// Switch views
dashboardView.classList.add('hidden');
levelContentView.classList.remove('hidden');
// Scroll to top
window.scrollTo(0, 0);
}
// Set active level in sidebar
function setActiveLevel(level) {
levelNavLinks.forEach(link => {
if (link.getAttribute('data-level') === level) {
link.classList.add('bg-indigo-50', 'text-indigo-700');
link.classList.remove('text-gray-700', 'hover:bg-indigo-50');
} else {
link.classList.remove('bg-indigo-50', 'text-indigo-700');
link.classList.add('text-gray-700', 'hover:bg-indigo-50');
}
});
}
</script>
<p style="border-radius: 8px; text-align: center; font-size: 12px; color: #fff; margin-top: 16px;position: fixed; left: 8px; bottom: 8px; z-index: 10; background: rgba(0, 0, 0, 0.8); padding: 4px 8px;">Made with <img src="https://enzostvs-deepsite.hf.space/logo.svg" alt="DeepSite Logo" style="width: 16px; height: 16px; vertical-align: middle;display:inline-block;margin-right:3px;filter:brightness(0) invert(1);"><a href="https://enzostvs-deepsite.hf.space" style="color: #fff;text-decoration: underline;" target="_blank" >DeepSite</a> - 🧬 <a href="https://enzostvs-deepsite.hf.space?remix=LukasBe/casual-game-arch-framework" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body>
</html>