aethex-us/src/pages/labs.astro

788 lines
24 KiB
Text

---
// Labs Division Page - The Grid Platform
import MainLayout from '../layouts/MainLayout.astro';
const bounties = [
{
name: 'UI Component Library',
reward: '$500',
difficulty: 'Intermediate',
description: 'Build reusable React components for the AeThex design system.',
skills: ['React', 'TypeScript', 'CSS']
},
{
name: 'API Documentation',
reward: '$300',
difficulty: 'Beginner',
description: 'Write comprehensive docs for the Platform API endpoints.',
skills: ['Technical Writing', 'Markdown', 'API']
},
{
name: 'Performance Optimization',
reward: '$800',
difficulty: 'Advanced',
description: 'Optimize rendering performance for the dashboard application.',
skills: ['React', 'Performance', 'Profiling']
},
{
name: 'Mobile App Feature',
reward: '$600',
difficulty: 'Intermediate',
description: 'Implement push notifications for the mobile companion app.',
skills: ['React Native', 'Firebase', 'Mobile']
}
];
const stats = [
{ label: 'Active Bounties', value: '48', icon: '💰', color: '#EAB308' },
{ label: 'Creators', value: '2.4K', icon: '👥', color: '#22c55e' },
{ label: 'Shipped Projects', value: '850+', icon: '🚀', color: '#3b82f6' },
{ label: 'Total Rewards', value: '$125K', icon: '⭐', color: '#f97316' }
];
const quickActions = [
{ label: 'Browse Bounties', icon: '💰' },
{ label: 'Create Profile', icon: '👤' },
{ label: 'View Leaderboard', icon: '🏆' }
];
---
<MainLayout>
<main class="entity-page labs">
<!-- Hero Banner with Terminal Style -->
<section class="hero-banner labs-hero">
<div class="hero-bg"></div>
<div class="hero-scanlines"></div>
<div class="hero-content">
<img src="/labs-logo.svg" alt="Labs Logo" class="entity-logo" />
<h1 class="entity-title animated">
<span class="terminal-prefix">&gt;</span>
<span class="fade-in">The Grid</span>
<span class="cursor">_</span>
</h1>
<p class="entity-desc fade-in-delay">Ship Code • Earn Rewards • Build Your Reputation</p>
<p class="terminal-status">Platform status: <span class="status-online">48 bounties available</span>. Join the creator community.</p>
<a href="#bounties" class="cta-btn">Explore Bounties</a>
</div>
</section>
<!-- Stats Dashboard -->
<section class="stats-section">
<div class="stats-grid">
{stats.map(stat => (
<div class="stat-card" style={`--stat-color: ${stat.color}`}>
<span class="stat-icon">{stat.icon}</span>
<div class="stat-info">
<span class="stat-value">{stat.value}</span>
<span class="stat-label">{stat.label}</span>
</div>
</div>
))}
</div>
</section>
<!-- Main Content Grid -->
<section class="labs-content">
<div class="content-grid">
<!-- Bounties Panel -->
<div class="panel projects-panel" id="bounties">
<div class="panel-header">
<h2><span class="prompt">&gt;</span> Available Bounties</h2>
</div>
<div class="projects-list">
{bounties.map(bounty => (
<div class="project-card">
<div class="project-header">
<h3 class="project-name">{bounty.name}</h3>
<span class={`project-status ${bounty.difficulty.toLowerCase()}`}>{bounty.reward}</span>
</div>
<p class="project-desc">{bounty.description}</p>
<div class="bounty-difficulty">
<span class={`difficulty-badge ${bounty.difficulty.toLowerCase()}`}>{bounty.difficulty}</span>
</div>
<div class="project-tech">
{bounty.skills.map(skill => (
<span class="tech-tag">{skill}</span>
))}
</div>
</div>
))}
</div>
</div>
<!-- Quick Actions Panel -->
<div class="panel actions-panel">
<div class="panel-header">
<h2><span class="prompt">&gt;</span> Quick Actions</h2>
</div>
<div class="actions-list">
{quickActions.map(action => (
<a href="/contribute" class="action-button">
<span class="action-icon">{action.icon}</span>
<span class="action-label">{action.label}</span>
<span class="action-arrow">→</span>
</a>
))}
</div>
<!-- Terminal Widget -->
<div class="terminal-widget">
<div class="terminal-header">
<span class="terminal-dot red"></span>
<span class="terminal-dot yellow"></span>
<span class="terminal-dot green"></span>
<span class="terminal-title">grid-terminal</span>
</div>
<div class="terminal-body">
<p><span class="prompt">$</span> grid bounties --available</p>
<p class="output">✓ 48 open bounties</p>
<p class="output">✓ $12.5K total rewards</p>
<p class="output">✓ 156 creators active</p>
<p><span class="prompt">$</span> <span class="cursor-blink">_</span></p>
</div>
</div>
</div>
</div>
</section>
<!-- About Labs -->
<section class="about-section">
<div class="glass-card">
<h2><span class="prompt">&gt;</span> About The Grid</h2>
<p class="about-text">
The Grid is the creator platform where builders ship code, claim bounties, and grow their reputation.
Collaborate with the community, earn rewards for your contributions, and build your portfolio
as part of the AeThex ecosystem.
</p>
<div class="focus-areas">
<div class="focus-item">
<span class="focus-icon">💰</span>
<h4>Bounties</h4>
<p>Claim tasks, ship code, earn rewards for your contributions</p>
</div>
<div class="focus-item">
<span class="focus-icon">⭐</span>
<h4>Reputation</h4>
<p>Build your creator profile with verified achievements and XP</p>
</div>
<div class="focus-item">
<span class="focus-icon">🤝</span>
<h4>Collaborate</h4>
<p>Connect with creators worldwide and build together</p>
</div>
</div>
</div>
</section>
<style>
/* ========== LABS PAGE STYLES ========== */
:root {
--labs-primary: #EAB308;
--labs-secondary: #fde047;
--labs-dark: #0a0a0a;
--labs-glow: #EAB30880;
}
.entity-page.labs {
background: linear-gradient(135deg, #0a0a0a 0%, #1a1505 50%, #0a0a0a 100%);
min-height: 100vh;
font-family: 'JetBrains Mono', 'Fira Code', 'Consolas', monospace;
color: #fff;
}
.nav-link {
color: #fff;
margin: 0 12px;
text-decoration: none;
font-weight: 600;
transition: color 0.2s, text-shadow 0.2s;
}
.nav-link:hover {
color: #ffa500;
text-shadow: 0 0 8px #ffa500;
}
/* Hero */
.hero-banner {
position: relative;
min-height: 60vh;
display: flex;
align-items: center;
justify-content: center;
padding: 80px 20px;
overflow: hidden;
}
.labs-hero .hero-bg {
position: absolute;
inset: 0;
background: radial-gradient(ellipse at 60% 30%, #ffa500 0%, transparent 50%),
radial-gradient(circle at 20% 80%, #ff6600 0%, transparent 40%);
opacity: 0.15;
z-index: 1;
}
.hero-scanlines {
position: absolute;
inset: 0;
background: repeating-linear-gradient(
0deg,
rgba(255, 165, 0, 0.03) 0px,
rgba(255, 165, 0, 0.03) 1px,
transparent 1px,
transparent 2px
);
pointer-events: none;
z-index: 2;
}
.hero-content {
position: relative;
z-index: 3;
text-align: center;
}
.entity-logo {
width: 80px;
height: 80px;
margin-bottom: 24px;
filter: drop-shadow(0 0 20px #ffa500);
}
.entity-title {
font-size: 3.5em;
font-weight: 900;
margin-bottom: 12px;
letter-spacing: 2px;
color: #fff;
text-shadow: 0 0 30px #ffa50060;
}
.terminal-prefix {
color: #ffa500;
}
.cursor {
animation: blink 1s infinite;
color: #ffa500;
}
@keyframes blink {
0%, 50% { opacity: 1; }
51%, 100% { opacity: 0; }
}
.entity-title.animated .fade-in {
animation: fadeInDown 1s cubic-bezier(.77,0,.175,1) both;
display: inline-block;
}
.entity-desc.fade-in-delay {
animation: fadeInUp 1.2s cubic-bezier(.77,0,.175,1) both;
display: block;
font-size: 1.2em;
margin-bottom: 16px;
color: #ffd580;
}
.terminal-status {
color: #888;
font-size: 0.9em;
margin-bottom: 32px;
}
.status-online {
color: #00ff88;
}
@keyframes fadeInDown {
from { opacity: 0; transform: translateY(-40px); }
to { opacity: 1; transform: translateY(0); }
}
@keyframes fadeInUp {
from { opacity: 0; transform: translateY(40px); }
to { opacity: 1; transform: translateY(0); }
}
.cta-btn {
display: inline-block;
padding: 14px 36px;
background: linear-gradient(90deg, #ffa500 0%, #ffd580 100%);
color: #000;
border-radius: 8px;
font-weight: 700;
text-decoration: none;
box-shadow: 0 4px 20px #ffa50060;
transition: all 0.3s ease;
letter-spacing: 1px;
font-size: 1em;
}
.cta-btn:hover {
transform: translateY(-3px);
box-shadow: 0 8px 30px #ffa50080;
}
/* Stats Section */
.stats-section {
padding: 40px 20px;
max-width: 1200px;
margin: 0 auto;
}
.stats-grid {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 20px;
}
.stat-card {
background: rgba(0, 0, 0, 0.6);
border: 1px solid var(--stat-color, #ffa500);
border-radius: 12px;
padding: 24px;
display: flex;
align-items: center;
gap: 16px;
transition: all 0.3s ease;
}
.stat-card:hover {
transform: scale(1.02);
box-shadow: 0 0 20px var(--stat-color, #ffa500);
}
.stat-icon {
font-size: 2em;
}
.stat-info {
display: flex;
flex-direction: column;
}
.stat-value {
font-size: 1.8em;
font-weight: 900;
color: var(--stat-color, #ffa500);
text-shadow: 0 0 10px var(--stat-color, #ffa500);
}
.stat-label {
font-size: 0.8em;
color: #888;
text-transform: uppercase;
letter-spacing: 1px;
}
/* Labs Content */
.labs-content {
padding: 40px 20px;
max-width: 1200px;
margin: 0 auto;
}
.content-grid {
display: grid;
grid-template-columns: 2fr 1fr;
gap: 30px;
}
.panel {
background: rgba(0, 0, 0, 0.5);
border: 1px solid rgba(255, 165, 0, 0.3);
border-radius: 16px;
overflow: hidden;
}
.panel-header {
background: rgba(255, 165, 0, 0.1);
padding: 16px 24px;
border-bottom: 1px solid rgba(255, 165, 0, 0.2);
}
.panel-header h2 {
font-size: 1.2em;
color: #ffa500;
margin: 0;
}
.prompt {
color: #00ff88;
}
/* Projects List */
.projects-list {
padding: 20px;
display: flex;
flex-direction: column;
gap: 16px;
}
.project-card {
background: rgba(255, 255, 255, 0.03);
border: 1px solid rgba(255, 165, 0, 0.2);
border-radius: 12px;
padding: 20px;
transition: all 0.3s ease;
}
.project-card:hover {
border-color: #ffa500;
transform: translateX(5px);
}
.project-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 10px;
}
.project-name {
font-size: 1.1em;
color: #fff;
margin: 0;
}
.project-status {
font-size: 0.75em;
padding: 4px 10px;
border-radius: 4px;
text-transform: uppercase;
letter-spacing: 1px;
font-weight: 600;
}
.project-status.in-development {
background: rgba(0, 200, 255, 0.2);
color: #00c8ff;
}
.project-status.beta-testing {
background: rgba(0, 255, 136, 0.2);
color: #00ff88;
}
.project-status.research {
background: rgba(255, 165, 0, 0.2);
color: #ffa500;
}
.project-status.alpha {
background: rgba(255, 100, 100, 0.2);
color: #ff6464;
}
.project-status.beginner,
.project-status.intermediate,
.project-status.advanced {
background: rgba(234, 179, 8, 0.2);
color: #EAB308;
}
.bounty-difficulty {
margin-bottom: 12px;
}
.difficulty-badge {
font-size: 0.75em;
padding: 4px 10px;
border-radius: 4px;
text-transform: uppercase;
letter-spacing: 1px;
font-weight: 600;
}
.difficulty-badge.beginner {
background: rgba(34, 197, 94, 0.2);
color: #22c55e;
}
.difficulty-badge.intermediate {
background: rgba(234, 179, 8, 0.2);
color: #EAB308;
}
.difficulty-badge.advanced {
background: rgba(239, 68, 68, 0.2);
color: #ef4444;
}
.project-desc {
color: #888;
font-size: 0.9em;
line-height: 1.5;
margin-bottom: 12px;
}
.progress-bar {
height: 8px;
background: rgba(255, 255, 255, 0.1);
border-radius: 4px;
position: relative;
margin-bottom: 12px;
overflow: hidden;
}
.progress-fill {
height: 100%;
background: linear-gradient(90deg, #ffa500, #ffd580);
border-radius: 4px;
transition: width 0.5s ease;
}
.progress-text {
position: absolute;
right: 8px;
top: 50%;
transform: translateY(-50%);
font-size: 0.7em;
color: #fff;
}
.project-tech {
display: flex;
gap: 8px;
flex-wrap: wrap;
}
.tech-tag {
background: rgba(255, 165, 0, 0.1);
border: 1px solid rgba(255, 165, 0, 0.3);
color: #ffa500;
padding: 4px 10px;
font-size: 0.75em;
border-radius: 4px;
}
/* Actions Panel */
.actions-panel {
display: flex;
flex-direction: column;
}
.actions-list {
padding: 20px;
display: flex;
flex-direction: column;
gap: 12px;
}
.action-button {
display: flex;
align-items: center;
gap: 12px;
padding: 14px 16px;
background: rgba(255, 255, 255, 0.03);
border: 1px solid rgba(255, 165, 0, 0.2);
border-radius: 8px;
color: #fff;
text-decoration: none;
transition: all 0.3s ease;
}
.action-button:hover {
background: rgba(255, 165, 0, 0.1);
border-color: #ffa500;
transform: translateX(5px);
}
.action-icon {
font-size: 1.2em;
}
.action-label {
flex: 1;
}
.action-arrow {
color: #ffa500;
}
/* Terminal Widget */
.terminal-widget {
margin: 20px;
background: #000;
border-radius: 8px;
overflow: hidden;
border: 1px solid rgba(255, 165, 0, 0.3);
}
.terminal-header {
background: #1a1a1a;
padding: 8px 12px;
display: flex;
align-items: center;
gap: 6px;
}
.terminal-dot {
width: 10px;
height: 10px;
border-radius: 50%;
}
.terminal-dot.red { background: #ff5f56; }
.terminal-dot.yellow { background: #ffbd2e; }
.terminal-dot.green { background: #27c93f; }
.terminal-title {
margin-left: 8px;
color: #666;
font-size: 0.8em;
}
.terminal-body {
padding: 16px;
font-size: 0.85em;
line-height: 1.8;
}
.terminal-body p {
margin: 0;
color: #ffa500;
}
.terminal-body .output {
color: #00ff88;
padding-left: 20px;
}
.cursor-blink {
animation: blink 1s infinite;
}
/* About Section */
.about-section {
padding: 60px 20px;
max-width: 1000px;
margin: 0 auto;
}
.glass-card {
background: rgba(255, 165, 0, 0.05);
border-radius: 24px;
box-shadow: 0 4px 40px #ffa50020;
backdrop-filter: blur(16px);
padding: 48px;
border: 1px solid rgba(255, 165, 0, 0.2);
}
.glass-card h2 {
font-size: 1.8em;
color: #ffa500;
margin-bottom: 20px;
}
.about-text {
color: #ccc;
font-size: 1.1em;
line-height: 1.8;
margin-bottom: 32px;
}
.focus-areas {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 24px;
}
.focus-item {
text-align: center;
padding: 24px;
background: rgba(0, 0, 0, 0.3);
border-radius: 16px;
border: 1px solid rgba(255, 165, 0, 0.2);
transition: all 0.3s ease;
}
.focus-item:hover {
border-color: #ffa500;
transform: translateY(-5px);
}
.focus-icon {
font-size: 2.5em;
display: block;
margin-bottom: 12px;
}
.focus-item h4 {
color: #ffa500;
margin-bottom: 8px;
}
.focus-item p {
color: #888;
font-size: 0.9em;
line-height: 1.5;
margin: 0;
}
/* Footer Styles */
.glass-footer {
background: rgba(30, 30, 20, 0.55);
backdrop-filter: blur(8px);
border-top: 3px solid #ffa500;
border-radius: 18px 18px 0 0;
box-shadow: 0 -2px 24px #ffa50040;
margin: 56px auto 0 auto;
max-width: 650px;
padding: 24px 32px 18px 32px;
text-align: center;
color: #fff;
font-size: 1.08em;
opacity: 0.95;
display: flex;
flex-wrap: wrap;
gap: 18px;
justify-content: center;
align-items: center;
}
.glass-footer a {
color: #ffa500;
margin: 0 8px;
text-decoration: none;
font-weight: 600;
display: inline-flex;
align-items: center;
transition: color 0.2s, text-shadow 0.2s;
}
.glass-footer a:hover {
color: #fff;
text-shadow: 0 0 8px #ffa500;
}
/* Responsive */
@media (max-width: 900px) {
.content-grid {
grid-template-columns: 1fr;
}
.stats-grid {
grid-template-columns: repeat(2, 1fr);
}
.focus-areas {
grid-template-columns: 1fr;
}
.hero-banner { padding: 60px 16px; min-height: auto; }
.labs-content { padding: 24px 16px; }
.stats-section { padding: 24px 16px; }
.about-section { padding: 40px 16px; }
}
@media (max-width: 768px) {
.hero-banner { padding: 40px 12px; }
.entity-title { font-size: 2.2em; }
.entity-desc { font-size: 1em; }
.terminal-status { font-size: 0.8em; margin-bottom: 20px; }
.cta-btn { padding: 12px 24px; font-size: 0.9em; }
.entity-logo { width: 60px; height: 60px; margin-bottom: 16px; }
.stats-grid { grid-template-columns: 1fr 1fr; gap: 12px; }
.stat-card { padding: 16px; gap: 12px; }
.stat-icon { font-size: 1.5em; }
.stat-value { font-size: 1.4em; }
.stat-label { font-size: 0.7em; }
.labs-content { padding: 20px 12px; }
.panel { border-radius: 12px; }
.panel-header { padding: 12px 16px; }
.panel-header h2 { font-size: 1em; }
.projects-list { padding: 12px; gap: 12px; }
.project-card { padding: 16px; border-radius: 10px; }
.project-name { font-size: 1em; }
.project-status { font-size: 0.65em; padding: 3px 8px; }
.project-desc { font-size: 0.85em; margin-bottom: 10px; }
.tech-tag { font-size: 0.7em; padding: 3px 8px; }
.actions-list { padding: 12px; gap: 10px; }
.action-button { padding: 12px 14px; }
.action-icon { font-size: 1em; }
.action-label { font-size: 0.9em; }
.terminal-widget { margin: 12px; }
.terminal-body { padding: 12px; font-size: 0.8em; }
.about-section { padding: 32px 12px; }
.glass-card { padding: 24px 16px; border-radius: 16px; }
.glass-card h2 { font-size: 1.4em; margin-bottom: 16px; }
.about-text { font-size: 0.95em; margin-bottom: 24px; }
.focus-item { padding: 20px 16px; border-radius: 12px; }
.focus-icon { font-size: 2em; margin-bottom: 10px; }
.focus-item h4 { font-size: 1em; }
.focus-item p { font-size: 0.85em; }
.glass-footer { margin: 32px 12px 0 12px; padding: 16px 20px; font-size: 0.95em; gap: 12px; }
}
@media (max-width: 480px) {
.hero-banner { padding: 24px 10px; }
.entity-title { font-size: 1.8em; letter-spacing: 1px; }
.entity-desc { font-size: 0.9em; }
.terminal-status { font-size: 0.75em; }
.cta-btn { padding: 10px 20px; font-size: 0.85em; width: 100%; max-width: 220px; }
.entity-logo { width: 48px; height: 48px; margin-bottom: 12px; }
.stats-section { padding: 16px 10px; }
.stats-grid { grid-template-columns: 1fr 1fr; gap: 10px; }
.stat-card { padding: 14px 12px; border-radius: 10px; }
.stat-icon { font-size: 1.3em; }
.stat-value { font-size: 1.2em; }
.stat-label { font-size: 0.65em; }
.labs-content { padding: 16px 10px; }
.panel { border-radius: 10px; }
.panel-header { padding: 10px 14px; }
.panel-header h2 { font-size: 0.9em; }
.projects-list { padding: 10px; gap: 10px; }
.project-card { padding: 14px 12px; border-radius: 8px; }
.project-header { flex-direction: column; align-items: flex-start; gap: 6px; }
.project-name { font-size: 0.95em; }
.project-status { font-size: 0.6em; }
.project-desc { font-size: 0.8em; line-height: 1.4; }
.bounty-difficulty { margin-bottom: 8px; }
.difficulty-badge { font-size: 0.65em; padding: 3px 8px; }
.project-tech { gap: 6px; }
.tech-tag { font-size: 0.65em; padding: 2px 6px; }
.actions-list { padding: 10px; gap: 8px; }
.action-button { padding: 10px 12px; border-radius: 6px; }
.action-icon { font-size: 0.9em; }
.action-label { font-size: 0.85em; }
.terminal-widget { margin: 10px; border-radius: 6px; }
.terminal-header { padding: 6px 10px; }
.terminal-dot { width: 8px; height: 8px; }
.terminal-title { font-size: 0.7em; }
.terminal-body { padding: 10px; font-size: 0.75em; line-height: 1.6; }
.about-section { padding: 20px 10px; }
.glass-card { padding: 20px 14px; border-radius: 12px; }
.glass-card h2 { font-size: 1.2em; margin-bottom: 12px; }
.about-text { font-size: 0.85em; line-height: 1.6; margin-bottom: 20px; }
.focus-areas { gap: 12px; }
.focus-item { padding: 16px 14px; border-radius: 10px; }
.focus-icon { font-size: 1.6em; margin-bottom: 8px; }
.focus-item h4 { font-size: 0.95em; margin-bottom: 6px; }
.focus-item p { font-size: 0.8em; }
.glass-footer { margin: 24px 10px 0 10px; padding: 14px 16px; font-size: 0.85em; gap: 10px; border-radius: 12px 12px 0 0; }
}
</style>
</main>
</MainLayout>