mirror of
https://github.com/mileswolfallen2/miles-web.git
synced 2026-09-08 11:23:17 +00:00
268 lines
11 KiB
HTML
268 lines
11 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>Moon Gaming | Miles Wolf Allen</title>
|
|
<meta name="description" content="Moon Gaming — a browser-based gaming platform with retro games and leaderboards.">
|
|
<link rel="canonical" href="https://milesallen.site/projects/moon-gaming.html">
|
|
<meta property="og:title" content="Moon Gaming | Miles Wolf Allen">
|
|
<meta property="og:description" content="Browser-based gaming platform with retro games and leaderboards.">
|
|
<meta property="og:image" content="https://milesallen.site/og.png">
|
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
<link href="https://fonts.googleapis.com/css2?family=Press+Start+2P&family=Space+Mono:wght@400;700&family=Inter:wght@400;500;600;800&display=swap" rel="stylesheet">
|
|
<link rel="icon" type="image/svg+xml" href="../favicon.svg">
|
|
<link rel="stylesheet" href="style.css">
|
|
</head>
|
|
<body>
|
|
<div class="cursor-dot" id="cursorDot"></div>
|
|
<div class="cursor-ring" id="cursorRing"></div>
|
|
<div class="progress-bar" id="progressBar"></div>
|
|
<button class="theme-toggle" id="themeToggle" aria-label="Toggle theme"></button>
|
|
<div class="shortcut-modal" id="shortcutModal">
|
|
<div class="shortcut-card">
|
|
<h3>Keyboard Shortcuts</h3>
|
|
<div class="shortcut-row"><span>Go Home</span><kbd>H</kbd></div>
|
|
<div class="shortcut-row"><span>Go to GitHub</span><kbd>G</kbd></div>
|
|
<div class="shortcut-row"><span>Toggle theme</span><kbd>T</kbd></div>
|
|
<div class="shortcut-row"><span>Show shortcuts</span><kbd>?</kbd></div>
|
|
<div class="close-hint">Press Esc or ? to close</div>
|
|
</div>
|
|
</div>
|
|
<div class="flash" id="flash"></div>
|
|
<div class="toast-stack" id="toastStack"></div>
|
|
<nav class="mobile-nav">
|
|
<a href="../index.html">Home</a>
|
|
<a href="fedl.html">FEDL</a>
|
|
<a href="moon-gaming.html" class="active">Moon Gaming</a>
|
|
<a href="command-move.html">CommandMove</a>
|
|
<a href="https://github.com/mileswolfallen2" target="_blank">GitHub</a>
|
|
</nav>
|
|
|
|
<div class="container">
|
|
<nav>
|
|
<a href="../index.html" class="nav-logo"><span class="logo-dot"></span> milesallen</a>
|
|
<div class="nav-links">
|
|
<a href="../index.html#about">About</a>
|
|
<a href="../index.html#skills">Skills</a>
|
|
<a href="../index.html#projects">Projects</a>
|
|
<a href="../index.html#contact">Contact</a>
|
|
</div>
|
|
</nav>
|
|
|
|
<section class="project-hero">
|
|
<div class="breadcrumb">
|
|
<a href="../index.html">Home</a>
|
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="9 18 15 12 9 6"/></svg>
|
|
<span>Moon Gaming</span>
|
|
</div>
|
|
|
|
<h1>Moon Gaming</h1>
|
|
<p class="tagline">A game hub showcasing original browser games with 1,542+ commits. Browse, play, and explore a growing library of HTML5 games.</p>
|
|
|
|
<div class="project-meta-bar">
|
|
<a href="https://github.com/mileswolfallen2/moon-gaming" class="meta-chip primary" target="_blank">
|
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 00-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0020 4.77 5.07 5.07 0 0019.91 1S18.73.65 16 2.48a13.38 13.38 0 00-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 005 4.77a5.44 5.44 0 00-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 009 18.13V22"/></svg>
|
|
View on GitHub
|
|
</a>
|
|
<span class="meta-chip">HTML</span>
|
|
<span class="meta-chip">MIT License</span>
|
|
</div>
|
|
<div class="stats-bar">
|
|
<div class="stat-item">
|
|
<div class="stat-value accent" id="gh-stars">--</div>
|
|
<div class="stat-label">Stars</div>
|
|
</div>
|
|
<div class="stat-item">
|
|
<div class="stat-value green" id="gh-forks">--</div>
|
|
<div class="stat-label">Forks</div>
|
|
</div>
|
|
<div class="stat-item">
|
|
<div class="stat-value orange" id="gh-issues">--</div>
|
|
<div class="stat-label">Issues</div>
|
|
</div>
|
|
<div class="stat-item">
|
|
<div class="stat-value" id="gh-lang">--</div>
|
|
<div class="stat-label">Language</div>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<section class="reveal">
|
|
<div class="section-divider"></div>
|
|
<h2 class="section-title">About</h2>
|
|
<p class="section-subtitle">A passion project for browser-based gaming</p>
|
|
|
|
<div class="feature-grid">
|
|
<div class="feature-card">
|
|
<h3>
|
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="2" y="6" width="20" height="12" rx="2"/><line x1="6" y1="12" x2="10" y2="12"/><line x1="8" y1="10" x2="8" y2="14"/><circle cx="17" cy="11" r="1"/><circle cx="15" cy="13" r="1"/></svg>
|
|
Game Library
|
|
</h3>
|
|
<p>Browse a curated collection of original browser games, all playable directly in your browser with no downloads required.</p>
|
|
</div>
|
|
<div class="feature-card">
|
|
<h3>
|
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2"/></svg>
|
|
HTML5 Powered
|
|
</h3>
|
|
<p>All games built with HTML5 Canvas and JavaScript — instant play on any device with a modern browser.</p>
|
|
</div>
|
|
<div class="feature-card">
|
|
<h3>
|
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="10"/><polyline points="12 6 12 12 16 14"/></svg>
|
|
Actively Maintained
|
|
</h3>
|
|
<p>1,542+ commits and counting. Regular updates with new games, features, and polish.</p>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<section class="reveal">
|
|
<div class="section-divider"></div>
|
|
<h2 class="section-title">Tech Stack</h2>
|
|
|
|
<div class="tech-grid">
|
|
<div class="tech-card">
|
|
<h3>
|
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polygon points="12 2 22 8.5 22 15.5 12 22 2 15.5 2 8.5 12 2"/></svg>
|
|
Frontend
|
|
</h3>
|
|
<div class="tech-list">
|
|
<code>HTML5</code>
|
|
<code>JavaScript</code>
|
|
<code>Canvas API</code>
|
|
<code>CSS3</code>
|
|
</div>
|
|
</div>
|
|
<div class="tech-card">
|
|
<h3>
|
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M22 12h-4l-3 9L9 3l-3 9H2"/></svg>
|
|
Features
|
|
</h3>
|
|
<div class="tech-list">
|
|
<code>Game Engine</code>
|
|
<code>Sprite Rendering</code>
|
|
<code>Collision Detection</code>
|
|
<code>Sound Effects</code>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<section class="reveal">
|
|
<div class="section-divider"></div>
|
|
<h2 class="section-title">Quick Start</h2>
|
|
<code-block>
|
|
<span class="comment"># Clone the repository</span>
|
|
<span class="cmd">$</span> git clone https://github.com/mileswolfallen2/moon-gaming.git
|
|
<span class="cmd">$</span> cd moon-gaming
|
|
|
|
<span class="comment"># Open in browser</span>
|
|
<span class="cmd">$</span> open index.html
|
|
</code-block>
|
|
</section>
|
|
|
|
<footer>
|
|
<div class="footer-links" style="margin-bottom: 12px;">
|
|
<a href="../uses.html" style="color:var(--muted);text-decoration:none;">Uses</a>
|
|
<span style="color:var(--muted);margin:0 8px;">·</span>
|
|
<a href="../now.html" style="color:var(--muted);text-decoration:none;">Now</a>
|
|
<span style="color:var(--muted);margin:0 8px;">·</span>
|
|
<a href="../colophon.html" style="color:var(--muted);text-decoration:none;">Colophon</a>
|
|
</div>
|
|
Built by Miles · 2026 · Powered by too much coffee and the Konami code
|
|
</footer>
|
|
</div>
|
|
<script>
|
|
fetch('https://api.github.com/repos/mileswolfallen2/moon-gaming')
|
|
.then(r => r.json())
|
|
.then(d => {
|
|
if (d.stargazers_count != null) document.getElementById('gh-stars').textContent = d.stargazers_count;
|
|
if (d.forks_count != null) document.getElementById('gh-forks').textContent = d.forks_count;
|
|
if (d.open_issues_count != null) document.getElementById('gh-issues').textContent = d.open_issues_count;
|
|
if (d.language) document.getElementById('gh-lang').textContent = d.language;
|
|
})
|
|
.catch(() => {});
|
|
const observer = new IntersectionObserver((entries) => {
|
|
entries.forEach(e => { if (e.isIntersecting) e.target.classList.add('visible'); });
|
|
}, { threshold: 0.1, rootMargin: '0px 0px -40px 0px' });
|
|
document.querySelectorAll('.reveal').forEach(el => observer.observe(el));
|
|
</script>
|
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/[email protected]/gsap.min.js"></script>
|
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/[email protected]/ScrollTrigger.min.js"></script>
|
|
<script>
|
|
gsap.registerPlugin(ScrollTrigger);
|
|
|
|
// Hero entrance
|
|
const heroTl = gsap.timeline({ defaults: { ease: 'power3.out' } });
|
|
heroTl
|
|
.from('.breadcrumb', { x: -30, opacity: 0, duration: 0.6 })
|
|
.from('.project-hero h1', { y: 50, opacity: 0, duration: 0.8 }, '-=0.3')
|
|
.from('.tagline', { y: 30, opacity: 0, duration: 0.7 }, '-=0.4')
|
|
.from('.meta-chip', { y: 20, opacity: 0, scale: 0.8, duration: 0.4, stagger: 0.06 }, '-=0.3')
|
|
.from('.stats-bar', { y: 30, opacity: 0, duration: 0.6 }, '-=0.2')
|
|
.from('.stat-item', { y: 20, opacity: 0, scale: 0.9, duration: 0.4, stagger: 0.08, ease: 'back.out(1.5)' }, '-=0.3');
|
|
|
|
// Nav entrance
|
|
gsap.from('nav', { y: -20, opacity: 0, duration: 0.6, ease: 'power2.out' });
|
|
|
|
// Section titles
|
|
document.querySelectorAll('.section-title').forEach(title => {
|
|
gsap.from(title, {
|
|
scrollTrigger: { trigger: title, start: 'top 85%' },
|
|
y: 30, opacity: 0, duration: 0.7, ease: 'power3.out'
|
|
});
|
|
});
|
|
|
|
// Section dividers
|
|
document.querySelectorAll('.section-divider').forEach(div => {
|
|
gsap.from(div, {
|
|
scrollTrigger: { trigger: div, start: 'top 90%' },
|
|
width: 0, duration: 0.6, ease: 'power2.out'
|
|
});
|
|
});
|
|
|
|
// Feature cards stagger
|
|
document.querySelectorAll('.feature-grid').forEach(grid => {
|
|
gsap.from(grid.querySelectorAll('.feature-card'), {
|
|
scrollTrigger: { trigger: grid, start: 'top 85%' },
|
|
y: 50, opacity: 0, scale: 0.9, duration: 0.6, stagger: 0.1, ease: 'power3.out'
|
|
});
|
|
});
|
|
|
|
// Tech badges
|
|
document.querySelectorAll('.tech-stack').forEach(stack => {
|
|
gsap.from(stack.querySelectorAll('.tech-badge'), {
|
|
scrollTrigger: { trigger: stack, start: 'top 88%' },
|
|
y: 20, opacity: 0, scale: 0.8, duration: 0.4, stagger: 0.05, ease: 'back.out(1.5)'
|
|
});
|
|
});
|
|
|
|
// Tables
|
|
document.querySelectorAll('.table-wrapper').forEach(wrapper => {
|
|
gsap.from(wrapper, {
|
|
scrollTrigger: { trigger: wrapper, start: 'top 85%' },
|
|
y: 40, opacity: 0, duration: 0.7, ease: 'power3.out'
|
|
});
|
|
});
|
|
|
|
// Code blocks
|
|
document.querySelectorAll('code-block').forEach(block => {
|
|
gsap.from(block, {
|
|
scrollTrigger: { trigger: block, start: 'top 88%' },
|
|
y: 30, opacity: 0, duration: 0.6, ease: 'power3.out'
|
|
});
|
|
});
|
|
|
|
// Footer
|
|
gsap.from('footer', {
|
|
scrollTrigger: { trigger: 'footer', start: 'top 95%' },
|
|
opacity: 0, duration: 0.8
|
|
});
|
|
|
|
window.addEventListener('load', () => ScrollTrigger.refresh());
|
|
</script>
|
|
<script src="script.js"></script>
|
|
</body>
|
|
</html> |