Add downloads page and update roadmap with new milestones
Adds a new downloads page for desktop applications and integrates new milestones for desktop and mobile applications into the roadmap page. Replit-Commit-Author: Agent Replit-Commit-Session-Id: 9203795e-937a-4306-b81d-b4d5c78c240e Replit-Commit-Checkpoint-Type: intermediate_checkpoint Replit-Commit-Event-Id: f42fc35c-b758-4fe4-9d6a-c616c5c45526 Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/7c94b7a0-29c7-4f2e-94ef-44b2153872b7/9203795e-937a-4306-b81d-b4d5c78c240e/UJaB6ez Replit-Helium-Checkpoint-Created: true
This commit is contained in:
parent
41e271eb39
commit
f208bce4b7
5 changed files with 518 additions and 31 deletions
4
.replit
4
.replit
|
|
@ -52,6 +52,10 @@ externalPort = 80
|
|||
localPort = 8044
|
||||
externalPort = 3003
|
||||
|
||||
[[ports]]
|
||||
localPort = 34265
|
||||
externalPort = 3002
|
||||
|
||||
[[ports]]
|
||||
localPort = 38557
|
||||
externalPort = 3000
|
||||
|
|
|
|||
|
|
@ -103,6 +103,7 @@ import StaffDashboard from "./pages/dashboards/StaffDashboard";
|
|||
import Roadmap from "./pages/Roadmap";
|
||||
import Trust from "./pages/Trust";
|
||||
import PressKit from "./pages/PressKit";
|
||||
import Downloads from "./pages/Downloads";
|
||||
import Projects from "./pages/Projects";
|
||||
import ProjectsAdmin from "./pages/ProjectsAdmin";
|
||||
import Directory from "./pages/Directory";
|
||||
|
|
@ -215,6 +216,7 @@ const App = () => (
|
|||
<Route path="/roadmap" element={<Roadmap />} />
|
||||
<Route path="/trust" element={<Trust />} />
|
||||
<Route path="/press" element={<PressKit />} />
|
||||
<Route path="/downloads" element={<Downloads />} />
|
||||
<Route path="/projects" element={<Projects />} />
|
||||
<Route
|
||||
path="/projects/admin"
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ import { motion } from "framer-motion";
|
|||
import { useNavigate, Link } from "react-router-dom";
|
||||
import IsometricRealmCard, { RealmData } from "./IsometricRealmCard";
|
||||
|
||||
const REALM_COLORS = ["#a855f7", "#22c55e", "#ef4444", "#eab308", "#3b82f6"];
|
||||
const REALM_COLORS = ["#a855f7", "#22c55e", "#ef4444", "#eab308", "#3b82f6", "#7c3aed", "#06b6d4"];
|
||||
|
||||
interface ParticleData {
|
||||
id: number;
|
||||
|
|
@ -75,6 +75,24 @@ const realms: RealmData[] = [
|
|||
description: "Enterprise solutions. Managed services for teams and organizations.",
|
||||
features: ["Dedicated support", "Custom integrations", "SLA guarantees"],
|
||||
},
|
||||
{
|
||||
id: "staff",
|
||||
label: "STAFF",
|
||||
color: "#7c3aed",
|
||||
route: "/staff",
|
||||
icon: "⚡",
|
||||
description: "Internal operations and team management for AeThex staff members.",
|
||||
features: ["Team coordination", "Admin tools", "Operations hub"],
|
||||
},
|
||||
{
|
||||
id: "devlink",
|
||||
label: "DEV-LINK",
|
||||
color: "#06b6d4",
|
||||
route: "/devlink",
|
||||
icon: "🔗",
|
||||
description: "Developer networking and collaboration. Connect with fellow builders.",
|
||||
features: ["Developer profiles", "Skill matching", "Collaboration tools"],
|
||||
},
|
||||
];
|
||||
|
||||
export default function IsometricRealmSelector() {
|
||||
|
|
@ -188,12 +206,30 @@ export default function IsometricRealmSelector() {
|
|||
{/* Main content */}
|
||||
<main className="selector-main">
|
||||
<motion.div
|
||||
className="hero-text"
|
||||
className="hero-intro"
|
||||
initial={{ opacity: 0, y: 20 }}
|
||||
animate={{ opacity: 1, y: 0 }}
|
||||
transition={{ duration: 0.6, delay: 0.2 }}
|
||||
>
|
||||
<h1>Select Your Realm</h1>
|
||||
<p className="tagline">Build the Future</p>
|
||||
<h1 className="main-headline">The Platform for Builders</h1>
|
||||
<p className="sub-headline">
|
||||
AeThex is an advanced development platform and community where creators collaborate,
|
||||
learn, and bring ideas to life. Join thousands of developers, designers, and innovators.
|
||||
</p>
|
||||
<div className="hero-cta">
|
||||
<Link to="/get-started" className="cta-primary">Get Started Free</Link>
|
||||
<Link to="/downloads" className="cta-secondary">Download Desktop App</Link>
|
||||
</div>
|
||||
</motion.div>
|
||||
|
||||
<motion.div
|
||||
className="hero-text"
|
||||
initial={{ opacity: 0, y: 20 }}
|
||||
animate={{ opacity: 1, y: 0 }}
|
||||
transition={{ duration: 0.6, delay: 0.4 }}
|
||||
>
|
||||
<h2>Select Your Realm</h2>
|
||||
<p>Each realm unlocks a unique experience tailored to your journey</p>
|
||||
</motion.div>
|
||||
|
||||
|
|
@ -210,18 +246,50 @@ export default function IsometricRealmSelector() {
|
|||
</div>
|
||||
|
||||
<motion.div
|
||||
className="footer-links"
|
||||
className="footer-section"
|
||||
initial={{ opacity: 0 }}
|
||||
animate={{ opacity: 1 }}
|
||||
transition={{ duration: 0.6, delay: 0.8 }}
|
||||
>
|
||||
<Link to="/community">Community</Link>
|
||||
<span className="divider">•</span>
|
||||
<Link to="/developers">Developers</Link>
|
||||
<span className="divider">•</span>
|
||||
<Link to="/roadmap">Roadmap</Link>
|
||||
<span className="divider">•</span>
|
||||
<Link to="/realms">All Realms</Link>
|
||||
<div className="footer-grid">
|
||||
<div className="footer-col">
|
||||
<h4>Platform</h4>
|
||||
<Link to="/downloads">Downloads</Link>
|
||||
<Link to="/roadmap">Roadmap</Link>
|
||||
<Link to="/changelog">Changelog</Link>
|
||||
<Link to="/status">Status</Link>
|
||||
</div>
|
||||
<div className="footer-col">
|
||||
<h4>Community</h4>
|
||||
<Link to="/community">Community Hub</Link>
|
||||
<Link to="/creators">Creators</Link>
|
||||
<Link to="/developers">Developers</Link>
|
||||
<Link to="/blog">Blog</Link>
|
||||
</div>
|
||||
<div className="footer-col">
|
||||
<h4>Company</h4>
|
||||
<Link to="/about">About</Link>
|
||||
<Link to="/careers">Careers</Link>
|
||||
<Link to="/press">Press Kit</Link>
|
||||
<Link to="/contact">Contact</Link>
|
||||
</div>
|
||||
<div className="footer-col">
|
||||
<h4>Legal</h4>
|
||||
<Link to="/privacy">Privacy</Link>
|
||||
<Link to="/terms">Terms</Link>
|
||||
<Link to="/trust">Trust Center</Link>
|
||||
</div>
|
||||
</div>
|
||||
<div className="footer-bottom">
|
||||
<p>© 2024 AeThex. All rights reserved.</p>
|
||||
<div className="footer-links-simple">
|
||||
<a href="https://discord.gg/aethex" target="_blank" rel="noopener noreferrer">Discord</a>
|
||||
<span className="divider">•</span>
|
||||
<a href="https://twitter.com/aethexdev" target="_blank" rel="noopener noreferrer">Twitter</a>
|
||||
<span className="divider">•</span>
|
||||
<a href="https://github.com/aethex" target="_blank" rel="noopener noreferrer">GitHub</a>
|
||||
</div>
|
||||
</div>
|
||||
</motion.div>
|
||||
</main>
|
||||
|
||||
|
|
@ -319,13 +387,89 @@ export default function IsometricRealmSelector() {
|
|||
padding: 20px 40px;
|
||||
}
|
||||
|
||||
.hero-intro {
|
||||
text-align: center;
|
||||
margin-bottom: 60px;
|
||||
padding: 40px 0;
|
||||
}
|
||||
|
||||
.tagline {
|
||||
font-size: 14px;
|
||||
font-weight: 600;
|
||||
color: #a855f7;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.15em;
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
|
||||
.main-headline {
|
||||
font-size: clamp(40px, 6vw, 64px);
|
||||
font-weight: 800;
|
||||
margin-bottom: 20px;
|
||||
background: linear-gradient(135deg, #ffffff 0%, #a855f7 50%, #3b82f6 100%);
|
||||
-webkit-background-clip: text;
|
||||
-webkit-text-fill-color: transparent;
|
||||
background-clip: text;
|
||||
line-height: 1.1;
|
||||
}
|
||||
|
||||
.sub-headline {
|
||||
font-size: 18px;
|
||||
color: #94a3b8;
|
||||
max-width: 600px;
|
||||
margin: 0 auto 32px;
|
||||
line-height: 1.6;
|
||||
}
|
||||
|
||||
.hero-cta {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
gap: 16px;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.cta-primary {
|
||||
padding: 14px 32px;
|
||||
border-radius: 12px;
|
||||
background: linear-gradient(135deg, #a855f7 0%, #7c3aed 100%);
|
||||
color: white;
|
||||
font-size: 15px;
|
||||
font-weight: 600;
|
||||
text-decoration: none;
|
||||
transition: all 0.3s ease;
|
||||
box-shadow: 0 4px 20px rgba(168, 85, 247, 0.3);
|
||||
}
|
||||
|
||||
.cta-primary:hover {
|
||||
transform: translateY(-2px);
|
||||
box-shadow: 0 8px 30px rgba(168, 85, 247, 0.4);
|
||||
}
|
||||
|
||||
.cta-secondary {
|
||||
padding: 14px 32px;
|
||||
border-radius: 12px;
|
||||
border: 1px solid #334155;
|
||||
background: rgba(30, 41, 59, 0.5);
|
||||
color: #e5e7eb;
|
||||
font-size: 15px;
|
||||
font-weight: 600;
|
||||
text-decoration: none;
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
|
||||
.cta-secondary:hover {
|
||||
background: rgba(30, 41, 59, 0.8);
|
||||
border-color: #475569;
|
||||
transform: translateY(-2px);
|
||||
}
|
||||
|
||||
.hero-text {
|
||||
text-align: center;
|
||||
margin-bottom: 50px;
|
||||
}
|
||||
|
||||
.hero-text h1 {
|
||||
font-size: clamp(32px, 5vw, 48px);
|
||||
.hero-text h2 {
|
||||
font-size: clamp(28px, 4vw, 40px);
|
||||
font-weight: 700;
|
||||
margin-bottom: 12px;
|
||||
background: linear-gradient(135deg, #e5e7eb 0%, #94a3b8 100%);
|
||||
|
|
@ -343,44 +487,98 @@ export default function IsometricRealmSelector() {
|
|||
|
||||
.realms-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
|
||||
gap: 32px;
|
||||
grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
|
||||
gap: 24px;
|
||||
justify-items: center;
|
||||
perspective: 2000px;
|
||||
}
|
||||
|
||||
@media (min-width: 1200px) {
|
||||
@media (min-width: 900px) {
|
||||
.realms-grid {
|
||||
grid-template-columns: repeat(3, 1fr);
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 1600px) {
|
||||
@media (min-width: 1200px) {
|
||||
.realms-grid {
|
||||
grid-template-columns: repeat(5, 1fr);
|
||||
grid-template-columns: repeat(4, 1fr);
|
||||
}
|
||||
}
|
||||
|
||||
.footer-links {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
gap: 16px;
|
||||
margin-top: 60px;
|
||||
font-size: 14px;
|
||||
@media (min-width: 1600px) {
|
||||
.realms-grid {
|
||||
grid-template-columns: repeat(7, 1fr);
|
||||
}
|
||||
}
|
||||
|
||||
.footer-links a {
|
||||
.footer-section {
|
||||
margin-top: 80px;
|
||||
padding-top: 40px;
|
||||
border-top: 1px solid #1e293b;
|
||||
}
|
||||
|
||||
.footer-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
|
||||
gap: 32px;
|
||||
margin-bottom: 40px;
|
||||
}
|
||||
|
||||
.footer-col h4 {
|
||||
font-size: 13px;
|
||||
font-weight: 600;
|
||||
color: #e5e7eb;
|
||||
margin-bottom: 16px;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.05em;
|
||||
}
|
||||
|
||||
.footer-col a {
|
||||
display: block;
|
||||
font-size: 14px;
|
||||
color: #64748b;
|
||||
text-decoration: none;
|
||||
margin-bottom: 10px;
|
||||
transition: color 0.2s ease;
|
||||
}
|
||||
|
||||
.footer-col a:hover {
|
||||
color: #a855f7;
|
||||
}
|
||||
|
||||
.footer-bottom {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
padding-top: 24px;
|
||||
border-top: 1px solid #1e293b;
|
||||
flex-wrap: wrap;
|
||||
gap: 16px;
|
||||
}
|
||||
|
||||
.footer-bottom p {
|
||||
font-size: 13px;
|
||||
color: #475569;
|
||||
}
|
||||
|
||||
.footer-links-simple {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 12px;
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
.footer-links-simple a {
|
||||
color: #64748b;
|
||||
text-decoration: none;
|
||||
transition: color 0.2s ease;
|
||||
}
|
||||
|
||||
.footer-links a:hover {
|
||||
.footer-links-simple a:hover {
|
||||
color: #e5e7eb;
|
||||
}
|
||||
|
||||
.footer-links .divider {
|
||||
.footer-links-simple .divider {
|
||||
color: #334155;
|
||||
}
|
||||
|
||||
|
|
@ -395,17 +593,46 @@ export default function IsometricRealmSelector() {
|
|||
padding: 20px;
|
||||
}
|
||||
|
||||
.hero-intro {
|
||||
padding: 20px 0;
|
||||
margin-bottom: 40px;
|
||||
}
|
||||
|
||||
.sub-headline {
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
.hero-cta {
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.cta-primary, .cta-secondary {
|
||||
width: 100%;
|
||||
max-width: 280px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.hero-text {
|
||||
margin-bottom: 32px;
|
||||
}
|
||||
|
||||
.realms-grid {
|
||||
gap: 20px;
|
||||
}
|
||||
|
||||
.footer-section {
|
||||
margin-top: 50px;
|
||||
}
|
||||
|
||||
.footer-grid {
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
gap: 24px;
|
||||
}
|
||||
|
||||
.footer-links {
|
||||
flex-wrap: wrap;
|
||||
margin-top: 40px;
|
||||
.footer-bottom {
|
||||
flex-direction: column;
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
`}</style>
|
||||
|
|
|
|||
218
client/pages/Downloads.tsx
Normal file
218
client/pages/Downloads.tsx
Normal file
|
|
@ -0,0 +1,218 @@
|
|||
import { useState } from "react";
|
||||
import Layout from "@/components/Layout";
|
||||
import SEO from "@/components/SEO";
|
||||
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card";
|
||||
import { Button } from "@/components/ui/button";
|
||||
import { Badge } from "@/components/ui/badge";
|
||||
import { Monitor, Apple, Terminal, Smartphone, Clock, CheckCircle2, Download, ExternalLink } from "lucide-react";
|
||||
|
||||
const CURRENT_VERSION = "0.1.0";
|
||||
const RELEASE_DATE = "December 2024";
|
||||
|
||||
interface PlatformDownload {
|
||||
id: string;
|
||||
name: string;
|
||||
icon: React.ReactNode;
|
||||
description: string;
|
||||
fileName: string;
|
||||
fileSize: string;
|
||||
available: boolean;
|
||||
requirements: string[];
|
||||
}
|
||||
|
||||
const platforms: PlatformDownload[] = [
|
||||
{
|
||||
id: "windows",
|
||||
name: "Windows",
|
||||
icon: <Monitor className="h-8 w-8" />,
|
||||
description: "Windows 10 or later (64-bit)",
|
||||
fileName: `AeThex-Desktop-Terminal-${CURRENT_VERSION}-win-x64.exe`,
|
||||
fileSize: "~120 MB",
|
||||
available: true,
|
||||
requirements: ["Windows 10 or later", "64-bit processor", "4 GB RAM minimum"],
|
||||
},
|
||||
{
|
||||
id: "macos",
|
||||
name: "macOS",
|
||||
icon: <Apple className="h-8 w-8" />,
|
||||
description: "macOS 10.15 (Catalina) or later",
|
||||
fileName: `AeThex-Desktop-Terminal-${CURRENT_VERSION}-mac-universal.dmg`,
|
||||
fileSize: "~130 MB",
|
||||
available: true,
|
||||
requirements: ["macOS 10.15 or later", "Apple Silicon or Intel", "4 GB RAM minimum"],
|
||||
},
|
||||
{
|
||||
id: "linux",
|
||||
name: "Linux",
|
||||
icon: <Terminal className="h-8 w-8" />,
|
||||
description: "Ubuntu 20.04+, Debian 10+, Fedora 32+",
|
||||
fileName: `AeThex-Desktop-Terminal-${CURRENT_VERSION}-x64.AppImage`,
|
||||
fileSize: "~115 MB",
|
||||
available: true,
|
||||
requirements: ["64-bit Linux distribution", "GTK 3.0+", "4 GB RAM minimum"],
|
||||
},
|
||||
];
|
||||
|
||||
const features = [
|
||||
"File watcher overlay for real-time project monitoring",
|
||||
"Quick access to all AeThex realms from your desktop",
|
||||
"Discord integration with status sync",
|
||||
"Offline mode for viewing cached content",
|
||||
"Native notifications for opportunities and messages",
|
||||
"Secure local credential storage",
|
||||
];
|
||||
|
||||
export default function Downloads() {
|
||||
const [selectedPlatform, setSelectedPlatform] = useState<string | null>(null);
|
||||
|
||||
const handleDownload = (platform: PlatformDownload) => {
|
||||
setSelectedPlatform(platform.id);
|
||||
const releaseUrl = `https://github.com/aethex/aethex-forge/releases/latest`;
|
||||
window.open(releaseUrl, "_blank");
|
||||
};
|
||||
|
||||
return (
|
||||
<Layout>
|
||||
<SEO
|
||||
pageTitle="Downloads | AeThex"
|
||||
description="Download the AeThex Desktop Terminal for Windows, macOS, and Linux. Access all AeThex features from your desktop."
|
||||
/>
|
||||
|
||||
<div className="min-h-screen bg-aethex-gradient py-12">
|
||||
<div className="container mx-auto px-4 max-w-6xl">
|
||||
<div className="text-center mb-12">
|
||||
<Badge variant="outline" className="mb-4 border-purple-500/50 text-purple-400">
|
||||
Version {CURRENT_VERSION}
|
||||
</Badge>
|
||||
<h1 className="text-4xl md:text-5xl font-bold mb-4 bg-gradient-to-r from-white via-purple-400 to-blue-400 bg-clip-text text-transparent">
|
||||
Download AeThex Desktop
|
||||
</h1>
|
||||
<p className="text-lg text-muted-foreground max-w-2xl mx-auto">
|
||||
The AeThex Desktop Terminal brings the full power of the platform to your computer.
|
||||
Access realms, manage projects, and stay connected with your community.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div className="grid md:grid-cols-3 gap-6 mb-12">
|
||||
{platforms.map((platform) => (
|
||||
<Card
|
||||
key={platform.id}
|
||||
className={`bg-card/50 backdrop-blur-sm border transition-all duration-300 hover:border-purple-500/50 ${
|
||||
selectedPlatform === platform.id ? "border-purple-500 ring-2 ring-purple-500/20" : "border-border/50"
|
||||
}`}
|
||||
>
|
||||
<CardHeader className="text-center">
|
||||
<div className="mx-auto mb-4 p-4 rounded-full bg-gradient-to-br from-purple-500/20 to-blue-500/20 border border-purple-500/20 text-purple-400">
|
||||
{platform.icon}
|
||||
</div>
|
||||
<CardTitle className="text-xl">{platform.name}</CardTitle>
|
||||
<CardDescription>{platform.description}</CardDescription>
|
||||
</CardHeader>
|
||||
<CardContent className="space-y-4">
|
||||
<div className="text-sm text-muted-foreground space-y-1">
|
||||
<p className="font-mono text-xs truncate">{platform.fileName}</p>
|
||||
<p>Size: {platform.fileSize}</p>
|
||||
</div>
|
||||
|
||||
{platform.available ? (
|
||||
<Button
|
||||
className="w-full bg-gradient-to-r from-purple-600 to-blue-600 hover:from-purple-700 hover:to-blue-700"
|
||||
onClick={() => handleDownload(platform)}
|
||||
>
|
||||
<Download className="h-4 w-4 mr-2" />
|
||||
Download for {platform.name}
|
||||
</Button>
|
||||
) : (
|
||||
<Button className="w-full" variant="secondary" disabled>
|
||||
<Clock className="h-4 w-4 mr-2" />
|
||||
Coming Soon
|
||||
</Button>
|
||||
)}
|
||||
|
||||
<div className="pt-4 border-t border-border/30">
|
||||
<p className="text-xs font-medium text-muted-foreground mb-2">Requirements:</p>
|
||||
<ul className="text-xs text-muted-foreground space-y-1">
|
||||
{platform.requirements.map((req, i) => (
|
||||
<li key={i} className="flex items-start gap-2">
|
||||
<CheckCircle2 className="h-3 w-3 mt-0.5 text-green-500 shrink-0" />
|
||||
{req}
|
||||
</li>
|
||||
))}
|
||||
</ul>
|
||||
</div>
|
||||
</CardContent>
|
||||
</Card>
|
||||
))}
|
||||
</div>
|
||||
|
||||
<Card className="bg-card/50 backdrop-blur-sm border border-border/50 mb-12">
|
||||
<CardHeader>
|
||||
<CardTitle>Desktop Features</CardTitle>
|
||||
<CardDescription>Everything you need to be productive on your desktop</CardDescription>
|
||||
</CardHeader>
|
||||
<CardContent>
|
||||
<div className="grid md:grid-cols-2 gap-4">
|
||||
{features.map((feature, i) => (
|
||||
<div key={i} className="flex items-start gap-3">
|
||||
<CheckCircle2 className="h-5 w-5 text-purple-500 shrink-0 mt-0.5" />
|
||||
<span className="text-sm">{feature}</span>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
</CardContent>
|
||||
</Card>
|
||||
|
||||
<Card className="bg-gradient-to-br from-slate-800/50 to-purple-900/20 border border-purple-500/20 mb-12">
|
||||
<CardHeader className="text-center">
|
||||
<div className="mx-auto mb-4 p-4 rounded-full bg-purple-500/10 border border-purple-500/20">
|
||||
<Smartphone className="h-8 w-8 text-purple-400" />
|
||||
</div>
|
||||
<CardTitle>Mobile Apps</CardTitle>
|
||||
<CardDescription>iOS and Android apps are coming soon</CardDescription>
|
||||
</CardHeader>
|
||||
<CardContent className="text-center">
|
||||
<p className="text-muted-foreground mb-4">
|
||||
Stay connected on the go. Our mobile apps will bring notifications, messaging,
|
||||
and quick actions to your pocket.
|
||||
</p>
|
||||
<div className="flex justify-center gap-4">
|
||||
<Badge variant="outline" className="border-slate-600">
|
||||
<Apple className="h-3 w-3 mr-1" />
|
||||
iOS - Coming Q2 2025
|
||||
</Badge>
|
||||
<Badge variant="outline" className="border-slate-600">
|
||||
<Smartphone className="h-3 w-3 mr-1" />
|
||||
Android - Coming Q2 2025
|
||||
</Badge>
|
||||
</div>
|
||||
</CardContent>
|
||||
</Card>
|
||||
|
||||
<div className="text-center space-y-4">
|
||||
<p className="text-sm text-muted-foreground">
|
||||
Released {RELEASE_DATE} • <a href="/changelog" className="text-purple-400 hover:underline">View changelog</a>
|
||||
</p>
|
||||
<div className="flex justify-center gap-4">
|
||||
<a
|
||||
href="https://github.com/aethex/aethex-forge/releases"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="text-sm text-muted-foreground hover:text-foreground flex items-center gap-1"
|
||||
>
|
||||
<ExternalLink className="h-3 w-3" />
|
||||
All releases
|
||||
</a>
|
||||
<a
|
||||
href="/roadmap"
|
||||
className="text-sm text-muted-foreground hover:text-foreground flex items-center gap-1"
|
||||
>
|
||||
<ExternalLink className="h-3 w-3" />
|
||||
View roadmap
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</Layout>
|
||||
);
|
||||
}
|
||||
|
|
@ -58,6 +58,13 @@ const QUESTS: Quest[] = [
|
|||
phase: "now",
|
||||
description: "Consistent top-level labels, fewer detours.",
|
||||
},
|
||||
{
|
||||
id: "desktop-app",
|
||||
title: "Desktop App (Beta)",
|
||||
xp: 200,
|
||||
phase: "now",
|
||||
description: "Windows, macOS, Linux builds with file watcher overlay.",
|
||||
},
|
||||
{
|
||||
id: "mentor-admin",
|
||||
title: "Mentorship admin flows",
|
||||
|
|
@ -128,6 +135,27 @@ const QUESTS: Quest[] = [
|
|||
phase: "month3",
|
||||
description: "This page—interactive and fun.",
|
||||
},
|
||||
{
|
||||
id: "desktop-stable",
|
||||
title: "Desktop App (Stable)",
|
||||
xp: 180,
|
||||
phase: "month2",
|
||||
description: "Auto-updates, crash reporting, performance tuning.",
|
||||
},
|
||||
{
|
||||
id: "mobile-ios",
|
||||
title: "iOS App (Beta)",
|
||||
xp: 250,
|
||||
phase: "month3",
|
||||
description: "Native iOS app with notifications and quick actions.",
|
||||
},
|
||||
{
|
||||
id: "mobile-android",
|
||||
title: "Android App (Beta)",
|
||||
xp: 250,
|
||||
phase: "month3",
|
||||
description: "Native Android app with notifications and quick actions.",
|
||||
},
|
||||
];
|
||||
|
||||
const PEEKS: Peek[] = [
|
||||
|
|
@ -155,6 +183,14 @@ const PEEKS: Peek[] = [
|
|||
image:
|
||||
"https://images.unsplash.com/photo-1553877522-43269d4ea984?q=80&w=1600&auto=format&fit=crop",
|
||||
},
|
||||
{
|
||||
id: "peek-4",
|
||||
title: "Mobile App Preview",
|
||||
phase: "month3",
|
||||
teaser: "Native iOS and Android apps with push notifications.",
|
||||
image:
|
||||
"https://images.unsplash.com/photo-1512941937669-90a1b58e7e9c?q=80&w=1600&auto=format&fit=crop",
|
||||
},
|
||||
];
|
||||
|
||||
const storageKey = "aethex_roadmap_unlocks_v1";
|
||||
|
|
|
|||
Loading…
Reference in a new issue