import { useState } from "react"; import Layout from "@/components/Layout"; import { Card, CardContent, CardDescription, CardHeader, CardTitle, } from "@/components/ui/card"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Calendar, Search, Filter, Plus, Bug, Zap, Shield, Code, Database, Users, Settings, Globe, BookOpen, Monitor, Network, Palette, CheckCircle, AlertTriangle, Info, ArrowUpRight, Github, ExternalLink, Bell, } from "lucide-react"; interface ChangelogEntry { id: string; version: string; date: string; type: "major" | "minor" | "patch"; category: string; title: string; description: string; changes: ChangelogItem[]; author: string; pullRequest?: string; } interface ChangelogItem { type: "added" | "improved" | "fixed" | "removed" | "security"; description: string; impact: "high" | "medium" | "low"; } export const changelogEntries: ChangelogEntry[] = [ { id: "v1.3.0", version: "1.3.0", date: "2025-10-18", type: "major", category: "Platform Enhancement", title: "Realms consolidation, live Status, feed upgrades, and Investors revamp", description: "Introduces a dedicated Realms management page with realm-aware dashboards, a live system Status page backed by a real API, improved social feed (likes, comments, and trending tags), and a redesigned Investors page with clear legal guidance.", author: "AeThex Development Team", changes: [ { type: "added", description: "Live Status backend endpoint (/api/status) with health checks for DB, API, Auth, and CDN; frontend /status now auto-refreshes with real data", impact: "high", }, { type: "added", description: "Dedicated /realms page for selecting and activating realms; dashboard adapts to active realm and supports ?realm= for direct navigation", impact: "high", }, { type: "added", description: "Navigation updated to include Realms; Investors link moved to footer", impact: "medium", }, { type: "added", description: "Investors page redesign with red theme and sections: Mission, Vision, What we do, How we execute, Traction/Roadmap; backend endpoint /api/investors/interest", impact: "medium", }, { type: "added", description: "Social feed enhancements: working likes and comments with API; expandable comment textbox; trending hashtag/topic tagging with suggestions", impact: "high", }, { type: "improved", description: "Unified unauthorized redirects to /onboarding for a consistent auth flow", impact: "medium", }, { type: "improved", description: "Staff area: moderation reports and mentorship requests now load live data with basic moderation actions; new /api/staff/users listing/search", impact: "medium", }, { type: "fixed", description: 'Resolved "invalid input value for Enum user_type_enum: \\"staff\\"" by adding "staff" to enum via migration', impact: "high", }, ], }, { id: "v1.2.0", version: "1.2.0", date: "2025-01-08", type: "major", category: "Platform Enhancement", title: "Major Platform Improvements & New Features", description: "Comprehensive platform upgrade with new dashboard features, improved user experience, and enhanced system monitoring capabilities.", author: "AeThex Development Team", pullRequest: "#121e8c26", changes: [ { type: "added", description: "New comprehensive Profile system with overseer dashboard and cross-site communication monitoring", impact: "high", }, { type: "added", description: "System Status page with real-time monitoring of all AeThex services and infrastructure", impact: "high", }, { type: "added", description: "Comprehensive Tutorials library with categorized learning content and filtering capabilities", impact: "medium", }, { type: "added", description: "Nested Documentation routing system with improved navigation and breadcrumbs", impact: "medium", }, { type: "added", description: "Documentation-specific tutorials section with interactive content types", impact: "medium", }, { type: "added", description: "Login access options on onboarding page to prevent duplicate account creation", impact: "medium", }, { type: "improved", description: "Enhanced navigation system with user-specific menu items when authenticated", impact: "medium", }, { type: "improved", description: "Dashboard user interface with proper profile data integration and XP progression", impact: "medium", }, { type: "improved", description: "Authentication flow with better error handling and redirect logic", impact: "high", }, { type: "fixed", description: "Resolved Dashboard infinite loading screen issue when accessing without authentication", impact: "high", }, { type: "fixed", description: "Fixed toast notification bouncing animations that were causing UI disruption", impact: "medium", }, { type: "fixed", description: "Corrected database adapter table name mismatches and TypeScript compilation errors", impact: "high", }, { type: "fixed", description: "Resolved DNS configuration issues for custom domain deployment", impact: "medium", }, { type: "fixed", description: "Fixed user profile property access issues throughout the application", impact: "medium", }, { type: "security", description: "Enhanced authentication redirect security with proper session handling", impact: "high", }, ], }, ]; const getTypeIcon = (type: string) => { switch (type) { case "added": return ; case "improved": return ; case "fixed": return ; case "removed": return ; case "security": return ; default: return ; } }; const getTypeColor = (type: string) => { switch (type) { case "added": return "bg-green-500"; case "improved": return "bg-blue-500"; case "fixed": return "bg-orange-500"; case "removed": return "bg-red-500"; case "security": return "bg-purple-500"; default: return "bg-gray-500"; } }; const getVersionBadgeColor = (type: string) => { switch (type) { case "major": return "bg-purple-600"; case "minor": return "bg-blue-600"; case "patch": return "bg-green-600"; default: return "bg-gray-600"; } }; const getImpactColor = (impact: string) => { switch (impact) { case "high": return "text-red-400"; case "medium": return "text-yellow-400"; case "low": return "text-green-400"; default: return "text-gray-400"; } }; export default function Changelog() { const [searchTerm, setSearchTerm] = useState(""); const [selectedType, setSelectedType] = useState("all"); const [selectedCategory, setSelectedCategory] = useState("all"); const filteredEntries = changelogEntries.filter((entry) => { const matchesSearch = entry.title.toLowerCase().includes(searchTerm.toLowerCase()) || entry.description.toLowerCase().includes(searchTerm.toLowerCase()) || entry.changes.some((change) => change.description.toLowerCase().includes(searchTerm.toLowerCase()), ); const matchesType = selectedType === "all" || entry.type === selectedType; const matchesCategory = selectedCategory === "all" || entry.category.toLowerCase().replace(/\s+/g, "-") === selectedCategory; return matchesSearch && matchesType && matchesCategory; }); const categories = [ "all", "platform-enhancement", "security", "performance", "ui-ux", ]; const types = ["all", "major", "minor", "patch"]; return (
{/* Header */}

AeThex Changelog

Track the latest updates, improvements, and fixes to the AeThex platform

{/* Stats */}

Total Releases

{changelogEntries.length}

New Features

{changelogEntries.reduce( (acc, entry) => acc + entry.changes.filter((c) => c.type === "added") .length, 0, )}

Bug Fixes

{changelogEntries.reduce( (acc, entry) => acc + entry.changes.filter((c) => c.type === "fixed") .length, 0, )}

Improvements

{changelogEntries.reduce( (acc, entry) => acc + entry.changes.filter((c) => c.type === "improved") .length, 0, )}

{/* Filters */}
setSearchTerm(e.target.value)} className="pl-10 bg-slate-800/50 border-slate-600 text-white" />
{/* Changelog Entries */}
{filteredEntries.map((entry, index) => (
v{entry.version} {entry.category}
{new Date(entry.date).toLocaleDateString("en-US", { year: "numeric", month: "long", day: "numeric", })}
{entry.pullRequest && ( )}
{entry.title} {entry.description}
By {entry.author}
{/* Group changes by type */} {["added", "improved", "fixed", "security", "removed"].map( (changeType) => { const changesOfType = entry.changes.filter( (change) => change.type === changeType, ); if (changesOfType.length === 0) return null; return (
{getTypeIcon(changeType)}

{changeType} ({changesOfType.length})

    {changesOfType.map((change, changeIndex) => (
  • {change.description}

    {change.impact} impact
  • ))}
); }, )}
))}
{filteredEntries.length === 0 && (

No changelog entries found

Try adjusting your search terms or filters to find what you're looking for.

)} {/* Footer */}

Stay Updated

Follow our development progress and get notified about new releases

); }