From 0e605c10d4130d93f977207359e64b1f31837e96 Mon Sep 17 00:00:00 2001 From: MrPiglr Date: Wed, 11 Feb 2026 19:00:29 +0000 Subject: [PATCH] new file: aethex-dev-docs.zip --- aethex-dev-docs.zip | Bin 0 -> 29710 bytes client/App.tsx | 13 + client/components/docs/DocsLayout.tsx | 6 + client/pages/dev-platform/AethexLang.tsx | 436 ++++++++++++++++++ client/pages/docs/lang/DocsLangCli.tsx | 379 +++++++++++++++ client/pages/docs/lang/DocsLangExamples.tsx | 414 +++++++++++++++++ client/pages/docs/lang/DocsLangOverview.tsx | 380 +++++++++++++++ client/pages/docs/lang/DocsLangQuickstart.tsx | 354 ++++++++++++++ client/pages/docs/lang/DocsLangSyntax.tsx | 365 +++++++++++++++ 9 files changed, 2347 insertions(+) create mode 100644 aethex-dev-docs.zip create mode 100644 client/pages/dev-platform/AethexLang.tsx create mode 100644 client/pages/docs/lang/DocsLangCli.tsx create mode 100644 client/pages/docs/lang/DocsLangExamples.tsx create mode 100644 client/pages/docs/lang/DocsLangOverview.tsx create mode 100644 client/pages/docs/lang/DocsLangQuickstart.tsx create mode 100644 client/pages/docs/lang/DocsLangSyntax.tsx diff --git a/aethex-dev-docs.zip b/aethex-dev-docs.zip new file mode 100644 index 0000000000000000000000000000000000000000..fa7cebf511d9926bb36a2ca35692cbbfc74059e3 GIT binary patch literal 29710 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 CqO@%Q literal 0 HcmV?d00001 diff --git a/client/App.tsx b/client/App.tsx index 1547582c..2801331a 100644 --- a/client/App.tsx +++ b/client/App.tsx @@ -56,6 +56,11 @@ import GameJoltIntegration from "./pages/docs/integrations/GameJolt"; import ItchIoIntegration from "./pages/docs/integrations/ItchIo"; import DocsCurriculum from "./pages/docs/DocsCurriculum"; import DocsCurriculumEthos from "./pages/docs/DocsCurriculumEthos"; +import DocsLangOverview from "./pages/docs/lang/DocsLangOverview"; +import DocsLangQuickstart from "./pages/docs/lang/DocsLangQuickstart"; +import DocsLangSyntax from "./pages/docs/lang/DocsLangSyntax"; +import DocsLangCli from "./pages/docs/lang/DocsLangCli"; +import DocsLangExamples from "./pages/docs/lang/DocsLangExamples"; import EthosGuild from "./pages/community/EthosGuild"; import TrackLibrary from "./pages/ethos/TrackLibrary"; import ArtistProfile from "./pages/ethos/ArtistProfile"; @@ -179,6 +184,7 @@ import MarketplaceItemDetail from "./pages/dev-platform/MarketplaceItemDetail"; import CodeExamples from "./pages/dev-platform/CodeExamples"; import ExampleDetail from "./pages/dev-platform/ExampleDetail"; import DeveloperPlatform from "./pages/dev-platform/DeveloperPlatform"; +import AethexLang from "./pages/dev-platform/AethexLang"; const queryClient = new QueryClient(); @@ -663,6 +669,12 @@ const App = () => ( path="integrations/itchio" element={} /> + {/* AeThex Language Docs */} + } /> + } /> + } /> + } /> + } /> } /> } /> @@ -891,6 +903,7 @@ const App = () => ( } /> } /> } /> + } /> {/* Explicit 404 route for static hosting fallbacks */} } /> diff --git a/client/components/docs/DocsLayout.tsx b/client/components/docs/DocsLayout.tsx index 4ec7457b..3600ee0f 100644 --- a/client/components/docs/DocsLayout.tsx +++ b/client/components/docs/DocsLayout.tsx @@ -81,6 +81,12 @@ const docNavigation: DocNavItem[] = [ icon: , description: "Learning paths", }, + { + title: "AeThex Language", + path: "/docs/lang", + icon: , + description: "AeThex programming language", + }, ]; interface DocsLayoutProps { diff --git a/client/pages/dev-platform/AethexLang.tsx b/client/pages/dev-platform/AethexLang.tsx new file mode 100644 index 00000000..367a414e --- /dev/null +++ b/client/pages/dev-platform/AethexLang.tsx @@ -0,0 +1,436 @@ +import Layout from "@/components/Layout"; +import SEO from "@/components/SEO"; +import { Button } from "@/components/ui/button"; +import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; +import { Badge } from "@/components/ui/badge"; +import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; +import { Link } from "react-router-dom"; +import { + Package, + Shield, + Users, + Zap, + Copy, + CheckCircle2, + ArrowRight, + ExternalLink, + Github, + Terminal, + Code, + Lock, + Globe, + FileText, +} from "lucide-react"; +import { useState } from "react"; + +const PACKAGE_VERSION = "1.0.0"; + +const features = [ + { + icon: Users, + title: "Passport", + description: "Universal identity across platforms - authenticate users seamlessly on Roblox, web, and more", + color: "text-blue-500", + bgColor: "bg-blue-500/10", + }, + { + icon: Zap, + title: "DataSync", + description: "Cross-platform data synchronization for real-time state management", + color: "text-yellow-500", + bgColor: "bg-yellow-500/10", + }, + { + icon: Shield, + title: "SafeInput", + description: "PII detection and scrubbing - critical for CODEX and child safety compliance", + color: "text-green-500", + bgColor: "bg-green-500/10", + }, + { + icon: Lock, + title: "Compliance", + description: "Built-in COPPA/FERPA compliance checks with audit trail logging", + color: "text-purple-500", + bgColor: "bg-purple-500/10", + }, +]; + +const platforms = [ + { name: "Roblox", supported: true }, + { name: "UEFN", supported: true }, + { name: "Unity", supported: true }, + { name: "Web", supported: true }, + { name: "Node.js", supported: true }, +]; + +const codeExamples = { + passport: `const { Passport } = require('@aethex.os/core'); + +const passport = new Passport('user123', 'PlayerOne'); +await passport.verify(); +await passport.syncAcross(['roblox', 'web']);`, + safeinput: `const { SafeInput } = require('@aethex.os/core'); + +// Detect PII +const detected = SafeInput.detectPII('Call me at 555-1234'); +// Returns: ['phone'] + +// Scrub PII +const clean = SafeInput.scrub('My email is user@example.com'); +// Returns: 'My email is [EMAIL_REDACTED]' + +// Validate input +const result = SafeInput.validate('PlayerName123'); +if (result.valid) { + console.log('Safe to use'); +}`, + compliance: `const { Compliance } = require('@aethex.os/core'); + +// Age gate +if (Compliance.isCOPPACompliant(userAge)) { + // User is 13+ +} + +// Check data collection permission +if (Compliance.canCollectData(user)) { + // Safe to collect +} + +// Log compliance check for audit +Compliance.logCheck(userId, 'leaderboard_submission', true);`, + datasync: `const { DataSync } = require('@aethex.os/core'); + +// Sync data across platforms +await DataSync.sync({ + inventory: playerInventory, + progress: gameProgress +}, ['roblox', 'web']); + +// Pull data from specific platform +const data = await DataSync.pull(userId, 'roblox');`, +}; + +function CopyButton({ text }: { text: string }) { + const [copied, setCopied] = useState(false); + + const handleCopy = async () => { + await navigator.clipboard.writeText(text); + setCopied(true); + setTimeout(() => setCopied(false), 2000); + }; + + return ( + + ); +} + +function CodeBlock({ code, language = "javascript" }: { code: string; language?: string }) { + return ( +
+ +
+        {code}
+      
+
+ ); +} + +export default function AethexLang() { + return ( + + +
+ {/* Hero Section */} +
+
+ + v{PACKAGE_VERSION} + + + MIT License + +
+

+ @aethex.os/core +

+

+ AeThex Language Standard Library — Cross-platform utilities for authentication, + data sync, and compliance across the metaverse. +

+ + {/* Install Command */} +
+
+ + + npm install @aethex.os/core + + +
+
+ + +
+ + {/* Platform Support */} +
+

Works everywhere you build

+
+ {platforms.map((platform) => ( + + + {platform.name} + + ))} +
+
+ + {/* Features Grid */} +
+

Core Modules

+

+ Everything you need to build safe, compliant, cross-platform experiences +

+
+ {features.map((feature) => ( + +
+ +
+

{feature.title}

+

{feature.description}

+
+ ))} +
+
+ + {/* Code Examples */} +
+

Quick Examples

+

+ Get started in minutes with these production-ready code snippets +

+ + + + Passport + SafeInput + Compliance + DataSync + + + + + + + Passport - Universal Identity + + + Authenticate users once, verify them everywhere + + + + + + + + + + + + + SafeInput - PII Detection + + + Detect and scrub personally identifiable information automatically + + + + + + + + + + + + + Compliance - COPPA/FERPA + + + Built-in compliance checks with audit trail logging + + + + + + + + + + + + + DataSync - Cross-Platform State + + + Synchronize data across all supported platforms + + + + + + + + +
+ + {/* API Reference */} +
+ + +
+
+

API Reference

+
+
+

Passport

+
    +
  • new Passport(userId, username) - Create passport
  • +
  • verify() - Verify identity
  • +
  • syncAcross(platforms) - Sync across platforms
  • +
  • toJSON() - Export as JSON
  • +
+
+
+

SafeInput

+
    +
  • SafeInput.detectPII(input) - Detect PII types
  • +
  • SafeInput.scrub(input) - Scrub PII from string
  • +
  • SafeInput.validate(input) - Validate input safety
  • +
+
+
+
+
+
+
+

DataSync

+
    +
  • DataSync.sync(data, platforms) - Sync data
  • +
  • DataSync.pull(userId, platform) - Pull data
  • +
+
+
+

Compliance

+
    +
  • Compliance.isCOPPACompliant(age) - Check if 13+
  • +
  • Compliance.requiresParentConsent(age) - Check if <13
  • +
  • Compliance.canCollectData(user) - Check permission
  • +
  • Compliance.logCheck(userId, type, result) - Audit log
  • +
+
+
+
+
+
+
+
+ + {/* Keywords/Use Cases */} +
+

Built for

+
+ {["metaverse", "cross-platform", "roblox", "uefn", "unity", "coppa", "compliance", "pii-detection"].map((keyword) => ( + + {keyword} + + ))} +
+
+ + {/* CTA */} +
+

Ready to Build?

+

+ Start building safer, compliant cross-platform experiences today. +

+
+ + + + + + +
+
+ + {/* Footer Info */} +
+

+ Maintained by{" "} + + AeThex Foundation + + {" · "} + + Report Issues + +

+
+
+
+ ); +} diff --git a/client/pages/docs/lang/DocsLangCli.tsx b/client/pages/docs/lang/DocsLangCli.tsx new file mode 100644 index 00000000..59c88321 --- /dev/null +++ b/client/pages/docs/lang/DocsLangCli.tsx @@ -0,0 +1,379 @@ +import { Link } from "react-router-dom"; +import { Badge } from "@/components/ui/badge"; +import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; +import { + Terminal, + CheckCircle2, + Copy, + ExternalLink, + Package, +} from "lucide-react"; +import { useState } from "react"; + +function CopyButton({ text }: { text: string }) { + const [copied, setCopied] = useState(false); + const handleCopy = async () => { + await navigator.clipboard.writeText(text); + setCopied(true); + setTimeout(() => setCopied(false), 2000); + }; + return ( + + ); +} + +function CodeBlock({ code, language = "bash" }: { code: string; language?: string }) { + return ( +
+ +
+        {code}
+      
+
+ ); +} + +const installCode = `npm install -g @aethex.os/cli`; + +const compileBasicCode = `aethex compile myfile.aethex`; + +const compileTargetCode = `# JavaScript (default) +aethex compile myfile.aethex --target javascript + +# Roblox/Lua +aethex compile myfile.aethex --target roblox + +# UEFN/Verse (coming soon) +aethex compile myfile.aethex --target uefn + +# Unity/C# (coming soon) +aethex compile myfile.aethex --target unity`; + +const outputCode = `aethex compile myfile.aethex -o output.js +aethex compile myfile.aethex -t roblox -o game.lua`; + +const watchCode = `aethex compile myfile.aethex --watch`; + +const newProjectCode = `# Basic project +aethex new my-project + +# With template +aethex new my-game --template passport`; + +const initCode = `aethex init`; + +const helloAethexCode = `reality HelloWorld { + platforms: all +} + +journey Greet(name) { + platform: all + notify "Hello, " + name + "!" +}`; + +const commands = [ + { + name: "compile", + syntax: "aethex compile ", + description: "Compile an AeThex file to the target platform", + options: [ + { flag: "-t, --target ", description: "Target platform (javascript, roblox, uefn, unity)" }, + { flag: "-o, --output ", description: "Output file path" }, + { flag: "-w, --watch", description: "Watch for changes and recompile" }, + ], + }, + { + name: "new", + syntax: "aethex new ", + description: "Create a new AeThex project", + options: [ + { flag: "--template ", description: "Project template (basic, passport, game)" }, + ], + }, + { + name: "init", + syntax: "aethex init", + description: "Initialize AeThex in the current directory", + options: [], + }, + { + name: "--help", + syntax: "aethex --help", + description: "Show help information", + options: [], + }, + { + name: "--version", + syntax: "aethex --version", + description: "Show CLI version", + options: [], + }, +]; + +const targets = [ + { name: "javascript", language: "JavaScript", platform: "Web, Node.js", status: "ready" }, + { name: "roblox", language: "Lua", platform: "Roblox", status: "ready" }, + { name: "uefn", language: "Verse", platform: "Fortnite", status: "coming" }, + { name: "unity", language: "C#", platform: "Unity, VRChat", status: "coming" }, +]; + +export default function DocsLangCli() { + return ( +
+ {/* Header */} +
+ + @aethex.os/cli + +

CLI Reference

+

+ AeThex Language Command Line Interface - Compile .aethex files + to JavaScript, Lua, Verse, and C#. +

+
+ + {/* Installation */} +
+

Installation

+ +

+ + View on npm + +

+
+ + {/* Usage */} +
+

Usage

+ +
+ + + + + Compile a file + + + + + + + + + + Compile to specific target + + + + + + + + + Save to file + + + + + + + + + Watch mode + Auto-recompile on file changes + + + + + + + + + Create new project + + + + + + + + + Initialize in existing directory + + + + + +
+
+ + {/* Example */} +
+

Example

+

+ Create hello.aethex: +

+ +

Compile and run:

+ +
+ + {/* Commands Reference */} +
+

Commands

+
+ {commands.map((cmd) => ( + + + {cmd.syntax} + {cmd.description} + + {cmd.options.length > 0 && ( + +
+ {cmd.options.map((opt) => ( +
+ {opt.flag} + {opt.description} +
+ ))} +
+
+ )} +
+ ))} +
+
+ + {/* Options */} +
+

Global Options

+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
OptionDescription
-t, --target <platform>Target platform (javascript, roblox, uefn, unity)
-o, --output <file>Output file path
-w, --watchWatch for changes
--template <type>Project template (basic, passport, game)
+
+
+ + {/* Targets */} +
+

Targets

+
+ + + + + + + + + + + {targets.map((target) => ( + + + + + + + ))} + +
TargetLanguagePlatformStatus
+ {target.name} + {target.language}{target.platform} + {target.status === "ready" ? ( + + Ready + + ) : ( + Coming Soon + )} +
+
+
+ + {/* Learn More */} +
+

Learn More

+
+ + + + +

Language Guide

+

Full documentation

+
+
+ + + + + +

Examples

+

Code samples

+
+
+ + + + + +

@aethex.os/core

+

Standard Library

+
+
+
+
+
+ + {/* Navigation */} +
+ + ← Language Syntax + + + Examples → + +
+
+ ); +} diff --git a/client/pages/docs/lang/DocsLangExamples.tsx b/client/pages/docs/lang/DocsLangExamples.tsx new file mode 100644 index 00000000..80c7f01d --- /dev/null +++ b/client/pages/docs/lang/DocsLangExamples.tsx @@ -0,0 +1,414 @@ +import { Link } from "react-router-dom"; +import { Badge } from "@/components/ui/badge"; +import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; +import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; +import { + CheckCircle2, + Copy, + Shield, + Users, + Award, + Zap, + Lock, +} from "lucide-react"; +import { useState } from "react"; + +function CopyButton({ text }: { text: string }) { + const [copied, setCopied] = useState(false); + const handleCopy = async () => { + await navigator.clipboard.writeText(text); + setCopied(true); + setTimeout(() => setCopied(false), 2000); + }; + return ( + + ); +} + +function CodeBlock({ code }: { code: string }) { + return ( +
+ +
+        {code}
+      
+
+ ); +} + +const helloWorldCode = `# AeThex Hello World Example + +reality HelloWorld { + platforms: all +} + +journey Greet(name) { + platform: all + notify "Hello, " + name + " from AeThex!" +}`; + +const crossPlatformAuthCode = `import { Passport, DataSync } from "@aethex.os/core" + +reality UniversalAuth { + platforms: [roblox, uefn, web] +} + +journey Login(username, password) { + platform: all + + let passport = new Passport(username) + + when passport.verify() { + sync passport across [roblox, uefn, web] + + # Pull existing data from any platform + let playerData = DataSync.pull(passport.userId, "roblox") + + notify "Logged in across all platforms!" + reveal passport + } +}`; + +const secureLeaderboardCode = `# The Foundry Certification Exam +# Task: Build a COPPA-compliant, PII-safe leaderboard +# +# Requirements: +# 1. Must accept player scores +# 2. Must detect and block PII (phone numbers, emails, etc.) +# 3. Must work on Roblox (Lua) +# 4. Must display safely without exposing sensitive data + +import { SafeInput, Compliance } from "@aethex.os/core" + +reality SecureLeaderboard { + platforms: [roblox] + type: "compliance-exam" +} + +# CRITICAL: This is the exam +# If PII gets through to the leaderboard, you FAIL + +journey SubmitScore(player, playerName, score) { + platform: roblox + + # STEP 1: Validate player age (COPPA compliance) + when !Compliance.isCOPPACompliant(player.age) { + notify "Players under 13 cannot submit scores publicly" + return + } + + # STEP 2: Validate player name for PII + let nameValidation = SafeInput.validate(playerName) + + when !nameValidation.valid { + notify "Invalid name: " + nameValidation.message + notify "Blocked PII types: " + nameValidation.blocked + + # Log security incident + Compliance.logCheck(player.userId, "leaderboard_name_check", false) + + return + } + + # STEP 3: Validate score value for PII + let scoreValidation = SafeInput.validate(score.toString()) + + when !scoreValidation.valid { + notify "Invalid score: contains sensitive data" + + # Log security incident + Compliance.logCheck(player.userId, "leaderboard_score_check", false) + + return + } + + # STEP 4: All validations passed - safe to submit + Compliance.logCheck(player.userId, "leaderboard_submission", true) + notify "Score submitted successfully!" + + reveal { + player: nameValidation.clean, + score: scoreValidation.clean + } +} + +# Test function: Attempts to inject PII +journey TestPIIDetection() { + platform: roblox + + notify "=== FOUNDRY EXAM TEST SUITE ===" + + # Test 1: Phone number in name + let test1 = SafeInput.validate("John 555-1234") + when test1.valid { + notify "❌ FAIL: Phone number not detected" + } otherwise { + notify "✅ PASS: Phone number blocked" + } + + # Test 2: Email in name + let test2 = SafeInput.validate("player@email.com") + when test2.valid { + notify "❌ FAIL: Email not detected" + } otherwise { + notify "✅ PASS: Email blocked" + } + + # Test 3: Clean name + let test3 = SafeInput.validate("PlayerOne") + when test3.valid { + notify "✅ PASS: Clean name accepted" + } otherwise { + notify "❌ FAIL: Clean name rejected" + } + + # Test 4: SSN in score + let test4 = SafeInput.validate("123-45-6789") + when test4.valid { + notify "❌ FAIL: SSN not detected" + } otherwise { + notify "✅ PASS: SSN blocked" + } +}`; + +const coppaRegistrationCode = `import { Compliance, Passport } from "@aethex.os/core" + +journey RegisterUser(username, age) { + platform: all + + when Compliance.isCOPPACompliant(age) { + # User is 13+, can proceed + let passport = new Passport(username) + passport.verify() + notify "Account created!" + } otherwise { + # Under 13, require parent consent + notify "Parent permission required" + # Send email to parent (implementation omitted) + } +}`; + +const dataSyncCode = `import { Passport, DataSync } from "@aethex.os/core" + +reality CrossPlatformProgress { + platforms: [roblox, uefn, web] +} + +journey SaveProgress(player, progress) { + platform: all + + # Sync progress data across all platforms + DataSync.sync({ + level: progress.level, + experience: progress.xp, + inventory: progress.items + }, [roblox, uefn, web]) + + notify "Progress saved!" +} + +journey LoadProgress(player) { + platform: all + + # Pull latest progress from any platform + let data = DataSync.pull(player.userId, "web") + + reveal data +}`; + +const examples = [ + { + id: "hello-world", + title: "Hello World", + description: "Your first AeThex program", + icon: Zap, + color: "text-yellow-500", + code: helloWorldCode, + difficulty: "Beginner", + }, + { + id: "cross-platform-auth", + title: "Cross-Platform Authentication", + description: "Login once, authenticated everywhere", + icon: Users, + color: "text-blue-500", + code: crossPlatformAuthCode, + difficulty: "Intermediate", + }, + { + id: "secure-leaderboard", + title: "Secure Leaderboard (Foundry Exam)", + description: "COPPA-compliant, PII-safe leaderboard - the certification exam", + icon: Award, + color: "text-purple-500", + code: secureLeaderboardCode, + difficulty: "Advanced", + }, + { + id: "coppa-registration", + title: "COPPA-Compliant Registration", + description: "User registration with age verification", + icon: Lock, + color: "text-green-500", + code: coppaRegistrationCode, + difficulty: "Intermediate", + }, + { + id: "data-sync", + title: "Cross-Platform Data Sync", + description: "Sync player progress across all platforms", + icon: Shield, + color: "text-cyan-500", + code: dataSyncCode, + difficulty: "Intermediate", + }, +]; + +const difficultyColors: Record = { + Beginner: "bg-green-500/20 text-green-400 border-green-500/30", + Intermediate: "bg-yellow-500/20 text-yellow-400 border-yellow-500/30", + Advanced: "bg-red-500/20 text-red-400 border-red-500/30", +}; + +export default function DocsLangExamples() { + const [activeExample, setActiveExample] = useState("hello-world"); + const currentExample = examples.find((e) => e.id === activeExample) || examples[0]; + + return ( +
+ {/* Header */} +
+ + Code Examples + +

Examples

+

+ Real-world code examples and patterns for AeThex development. +

+
+ + {/* Examples Grid for Quick Navigation */} +
+

Browse Examples

+
+ {examples.map((example) => ( + + ))} +
+
+ + {/* Active Example Display */} +
+ + +
+
+ + {currentExample.title} +
+ + {currentExample.difficulty} + +
+ {currentExample.description} +
+ + + +
+
+ + {/* All Examples (Tabbed) */} +
+

All Examples

+ + + {examples.map((example) => ( + + {example.title.split(" ")[0]} + + ))} + + {examples.map((example) => ( + + + +
+ + {example.title} + + {example.difficulty} + +
+ {example.description} +
+ + + +
+
+ ))} +
+
+ + {/* The Foundry Note */} +
+ + +
+ +
+

The Foundry Certification

+

+ The Secure Leaderboard example above is the actual Foundry certification exam. + If you can implement a COPPA-compliant, PII-safe leaderboard that passes all validation tests, + you're ready for professional metaverse development. +

+ + Learn more about The Foundry → + +
+
+
+
+
+ + {/* Navigation */} +
+ + ← CLI Reference + + + Back to Overview → + +
+
+ ); +} diff --git a/client/pages/docs/lang/DocsLangOverview.tsx b/client/pages/docs/lang/DocsLangOverview.tsx new file mode 100644 index 00000000..f34af2f7 --- /dev/null +++ b/client/pages/docs/lang/DocsLangOverview.tsx @@ -0,0 +1,380 @@ +import { Link } from "react-router-dom"; +import { Button } from "@/components/ui/button"; +import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; +import { Badge } from "@/components/ui/badge"; +import { + Package, + Terminal, + BookOpen, + Code, + Zap, + Shield, + Users, + ExternalLink, + ArrowRight, + CheckCircle2, + FileText, + Github, + Globe, + Lock, + Copy, +} from "lucide-react"; +import { useState } from "react"; + +function CopyButton({ text }: { text: string }) { + const [copied, setCopied] = useState(false); + const handleCopy = async () => { + await navigator.clipboard.writeText(text); + setCopied(true); + setTimeout(() => setCopied(false), 2000); + }; + return ( + + ); +} + +function CodeBlock({ code, language = "aethex" }: { code: string; language?: string }) { + return ( +
+ +
+        {code}
+      
+
+ ); +} + +const docSections = [ + { + title: "Quick Start", + description: "Get up and running in 5 minutes", + icon: Zap, + href: "/docs/lang/quickstart", + color: "text-yellow-500", + bgColor: "bg-yellow-500/10", + }, + { + title: "Language Syntax", + description: "Learn realities, journeys, and cross-platform sync", + icon: Code, + href: "/docs/lang/syntax", + color: "text-blue-500", + bgColor: "bg-blue-500/10", + }, + { + title: "CLI Reference", + description: "Command line compiler and tools", + icon: Terminal, + href: "/docs/lang/cli", + color: "text-green-500", + bgColor: "bg-green-500/10", + }, + { + title: "Examples", + description: "Real-world code examples and patterns", + icon: FileText, + href: "/docs/lang/examples", + color: "text-purple-500", + bgColor: "bg-purple-500/10", + }, +]; + +const features = [ + { + icon: Globe, + title: "Cross-Platform Native", + description: "Deploy to Roblox, UEFN, Unity, VRChat, Spatial, and Web", + }, + { + icon: Users, + title: "Universal Passport", + description: "Single identity system across all metaverse platforms", + }, + { + icon: Shield, + title: "Compliance-First", + description: "Built-in COPPA/FERPA/PII protection", + }, + { + icon: Package, + title: "Standard Library", + description: "Battle-tested utilities for auth, data sync, and safety", + }, +]; + +const platforms = [ + { name: "JavaScript", status: "ready" }, + { name: "Roblox (Lua)", status: "ready" }, + { name: "UEFN (Verse)", status: "coming" }, + { name: "Unity (C#)", status: "coming" }, +]; + +const helloWorldCode = `reality HelloWorld { + platforms: all +} + +journey Greet(name) { + platform: all + notify "Hello, " + name + "!" +}`; + +const crossPlatformCode = `import { Passport } from "@aethex.os/core" + +reality MyGame { + platforms: [roblox, uefn, web] +} + +journey AuthenticatePlayer(username) { + platform: all + + let passport = new Passport(username) + + when passport.verify() { + sync passport across [roblox, uefn, web] + notify "Welcome, " + username + "!" + } +}`; + +export default function DocsLangOverview() { + return ( +
+ {/* Hero Section */} +
+
+ + v1.0.0 + + + MIT License + +
+

AeThex Language

+

+ Write once. Build everywhere. Comply by default. +

+

+ AeThex is a programming language for cross-platform metaverse development. + Write your game logic, authentication, and compliance rules once, then compile + to JavaScript, Lua (Roblox), Verse (UEFN), and C# (Unity). +

+ + {/* Install Command */} +
+
+ + + npm install -g @aethex.os/cli + + +
+
+ +
+ + + + + + +
+
+ + {/* Platform Support */} +
+

Compilation Targets

+
+ {platforms.map((platform) => ( + + {platform.status === "ready" && } + {platform.name} + {platform.status === "coming" && " (Coming Soon)"} + + ))} +
+
+ + {/* Documentation Sections */} +
+

Documentation

+
+ {docSections.map((section) => ( + + + +
+ +
+
+ {section.title} + {section.description} +
+
+
+ + ))} +
+
+ + {/* Hello World Example */} +
+

Hello World

+

+ Create hello.aethex: +

+ +
+ + aethex compile hello.aethex + + + node hello.js + +
+
+ + {/* Cross-Platform Example */} +
+

Cross-Platform Authentication

+

+ One codebase, deployed everywhere: +

+ +
+ + {/* Features */} +
+

Why AeThex?

+
+ {features.map((feature) => ( +
+
+ +
+
+

{feature.title}

+

{feature.description}

+
+
+ ))} +
+
+ + {/* npm Packages */} +
+

npm Packages

+
+ + + + + @aethex.os/cli + + Command line compiler + + + + View on npm + + + + + + + + @aethex.os/core + + Standard library + + + + View on npm + + + +
+
+ + {/* The Foundry */} +
+ + + +

The Foundry Certification

+

+ AeThex is the official language taught at The AeThex Foundry certification program. + Learn to build compliant, cross-platform metaverse experiences. +

+
+ + + +
+
+
+
+ + {/* Quick Links */} +
+

+ + GitHub + + + + Report Issues + + + + Community + +

+
+
+ ); +} diff --git a/client/pages/docs/lang/DocsLangQuickstart.tsx b/client/pages/docs/lang/DocsLangQuickstart.tsx new file mode 100644 index 00000000..c4018137 --- /dev/null +++ b/client/pages/docs/lang/DocsLangQuickstart.tsx @@ -0,0 +1,354 @@ +import { Link } from "react-router-dom"; +import { Button } from "@/components/ui/button"; +import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; +import { Badge } from "@/components/ui/badge"; +import { + Terminal, + CheckCircle2, + Copy, + ArrowRight, + FileText, + Folder, + ExternalLink, +} from "lucide-react"; +import { useState } from "react"; + +function CopyButton({ text }: { text: string }) { + const [copied, setCopied] = useState(false); + const handleCopy = async () => { + await navigator.clipboard.writeText(text); + setCopied(true); + setTimeout(() => setCopied(false), 2000); + }; + return ( + + ); +} + +function CodeBlock({ code, language = "bash" }: { code: string; language?: string }) { + return ( +
+ +
+        {code}
+      
+
+ ); +} + +function StepCard({ number, title, children }: { number: number; title: string; children: React.ReactNode }) { + return ( + +
+ {number} +
+ + {title} + + + {children} + +
+ ); +} + +const installCode = `# Install the CLI globally +npm install -g @aethex.os/cli + +# Verify installation +aethex --version`; + +const newProjectCode = `aethex new my-first-game +cd my-first-game +npm install`; + +const mainAethexCode = `reality MyFirstGame { + platforms: [roblox, web] +} + +journey WelcomePlayer(username) { + platform: all + notify "Welcome, " + username + "!" +}`; + +const compileCode = `# Compile to JavaScript +npm run build + +# Run it +node build/main.js + +# Or compile to Roblox +npm run build:roblox`; + +const authExampleCode = `import { Passport } from "@aethex.os/core" + +journey Login(username) { + let passport = new Passport(username) + + when passport.verify() { + sync passport across [roblox, web] + notify "Logged in everywhere!" + } +}`; + +const piiExampleCode = `import { SafeInput } from "@aethex.os/core" + +journey SubmitScore(player, score) { + let validation = SafeInput.validate(score) + + when validation.valid { + # Safe to submit + notify "Score: " + score + } otherwise { + # PII detected! + notify "Error: " + validation.message + } +}`; + +const projectStructure = `my-project/ +├── aethex.config.json # Config file +├── package.json # npm dependencies +├── src/ +│ ├── main.aethex # Your code +│ ├── auth.aethex +│ └── game.aethex +└── build/ + ├── main.js # Compiled JavaScript + └── main.lua # Compiled Lua`; + +const stdlibCode = `# Import from @aethex.os/core +import { Passport, DataSync, SafeInput, Compliance } from "@aethex.os/core" + +# Import from @aethex.os/roblox (platform-specific) +import { RemoteEvent, Leaderboard } from "@aethex.os/roblox"`; + +const commonPatterns = { + auth: `journey Login(user) { + when user.verify() { + sync user.passport across [roblox, web] + } +}`, + datasync: `journey SaveProgress(player) { + sync player.stats across [roblox, uefn, web] +}`, + pii: `let result = SafeInput.validate(userInput) +when result.valid { + # Safe to use +}`, + coppa: `when Compliance.isCOPPACompliant(user.age) { + # User is 13+ +}`, +}; + +export default function DocsLangQuickstart() { + return ( +
+ {/* Header */} +
+ + 5 Minute Guide + +

Quick Start

+

+ Get up and running with AeThex in 5 minutes. +

+
+ + {/* Installation */} +
+

Installation

+ +
+ + {/* Steps */} +
+

Your First AeThex Program

+ + + + + + + + + + + + +
+ + {/* Example Projects */} +
+

Example Projects

+ +
+ + + Cross-Platform Authentication + Authenticate users across multiple platforms with one codebase + + + +
+ Compile and run: + aethex compile auth.aethex && node auth.js +
+
+
+ + + +
+ PII-Safe Leaderboard + Foundry Exam +
+ + This is the Foundry certification exam - if you can build this correctly, + you're ready to work in metaverse development. + +
+ + + +
+
+
+ + {/* Compilation Targets */} +
+

Compilation Targets

+ +
+ + {/* Watch Mode */} +
+

Watch Mode

+

Auto-recompile on file save:

+ +
+ + {/* Project Structure */} +
+

Project Structure

+ +
+ + {/* Standard Library */} +
+

Standard Library

+ +
+ + {/* Common Patterns */} +
+

Common Patterns

+
+ + + Authentication + + + + + + + + Data Sync + + + + + + + + PII Protection + + + + + + + + COPPA Compliance + + + + + +
+
+ + {/* Next Steps */} +
+

Next Steps

+
+ + + + + + Language Syntax + + Learn realities, journeys, and more + + + + + + + + + Examples + + View more code examples + + + +
+
+ + {/* Getting Help */} +
+

Getting Help

+

+ + GitHub Issues + + + + Discord + + + + Support + +

+
+
+ ); +} diff --git a/client/pages/docs/lang/DocsLangSyntax.tsx b/client/pages/docs/lang/DocsLangSyntax.tsx new file mode 100644 index 00000000..948d4dc0 --- /dev/null +++ b/client/pages/docs/lang/DocsLangSyntax.tsx @@ -0,0 +1,365 @@ +import { Link } from "react-router-dom"; +import { Badge } from "@/components/ui/badge"; +import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; +import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; +import { + CheckCircle2, + Copy, + Code, + Layers, + Zap, + Globe, + GitBranch, +} from "lucide-react"; +import { useState } from "react"; + +function CopyButton({ text }: { text: string }) { + const [copied, setCopied] = useState(false); + const handleCopy = async () => { + await navigator.clipboard.writeText(text); + setCopied(true); + setTimeout(() => setCopied(false), 2000); + }; + return ( + + ); +} + +function CodeBlock({ code, language = "aethex" }: { code: string; language?: string }) { + return ( +
+ +
+        {code}
+      
+
+ ); +} + +const realitiesCode = `reality GameName { + platforms: [roblox, uefn, web] + type: "multiplayer" +}`; + +const journeysCode = `journey ProcessScore(player, score) { + platform: all + + # Automatically scrubs PII before processing + when score > 1000 { + notify "High score achieved!" + } +}`; + +const syncCode = `import { Passport } from "@aethex.os/core" + +journey SaveProgress(player) { + platform: all + + let passport = player.passport + sync passport across [roblox, uefn, web] +}`; + +const conditionalCode = `when player.age < 13 { + # COPPA compliance automatic + notify "Parent permission required" +} otherwise { + # Full features unlocked + reveal player.stats +}`; + +const platformSpecificCode = `journey DisplayLeaderboard() { + platform: roblox { + # Roblox-specific code + reveal leaderboardGUI + } + + platform: web { + # Web-specific code + reveal leaderboardHTML + } +}`; + +const coreLibraryCode = `import { Passport, DataSync, SafeInput, Compliance } from "@aethex.os/core" + +# Passport - Universal identity +let passport = new Passport(userId, username) +passport.verify() +passport.syncAcross([roblox, web]) + +# DataSync - Cross-platform data +DataSync.sync(playerData, [roblox, uefn]) + +# SafeInput - PII protection +let result = SafeInput.validate(userInput) +when result.valid { + # Input is safe +} + +# Compliance - COPPA/FERPA checks +when Compliance.isCOPPACompliant(user.age) { + # Can collect data +}`; + +const robloxLibraryCode = `import { RemoteEvent, Leaderboard } from "@aethex.os/roblox" + +# Roblox-specific features +let event = RemoteEvent.new("PlayerJoined") +event.FireAllClients(player) + +let stats = Leaderboard.new("Points", 0) +Leaderboard.updateScore(player, "Points", 100)`; + +const configCode = `{ + "targets": ["javascript", "roblox", "uefn"], + "srcDir": "src", + "outDir": "build", + "stdlib": true, + "compliance": { + "coppa": true, + "ferpa": true, + "piiDetection": true + } +}`; + +const projectStructureCode = `my-game/ +├── aethex.config.json # Compilation settings +├── package.json # npm dependencies +├── src/ +│ ├── main.aethex # Entry point +│ ├── auth.aethex # Authentication logic +│ └── game.aethex # Game logic +└── build/ + ├── main.js # JavaScript output + └── main.lua # Roblox output`; + +const syntaxSections = [ + { + id: "realities", + title: "Realities (Namespaces)", + icon: Layers, + description: "Define your game or application namespace", + code: realitiesCode, + }, + { + id: "journeys", + title: "Journeys (Functions)", + icon: Zap, + description: "Create functions that run across platforms", + code: journeysCode, + }, + { + id: "sync", + title: "Cross-Platform Sync", + icon: Globe, + description: "Synchronize data across all platforms with one line", + code: syncCode, + }, + { + id: "conditionals", + title: "Conditional Logic", + icon: GitBranch, + description: "Use when/otherwise for conditions with built-in compliance", + code: conditionalCode, + }, + { + id: "platform", + title: "Platform-Specific Code", + icon: Code, + description: "Write code that only runs on specific platforms", + code: platformSpecificCode, + }, +]; + +export default function DocsLangSyntax() { + return ( +
+ {/* Header */} +
+ + Language Reference + +

Language Syntax

+

+ Learn the AeThex syntax, from realities and journeys to cross-platform sync. +

+
+ + {/* Syntax Sections */} +
+ {syntaxSections.map((section) => ( + + + + + {section.title} + + {section.description} + + + + + + ))} +
+ + {/* Standard Library */} +
+

Standard Library

+ + + + @aethex.os/core + @aethex.os/roblox + + + + + Core Library + + Universal utilities for authentication, data sync, and compliance + + + + + + + + + + + Roblox Library + + Roblox-specific features and integrations + + + + + + + + +
+ + {/* Configuration */} +
+

Configuration

+

+ Configure your project with aethex.config.json: +

+ +
+ + {/* Project Structure */} +
+

Project Structure

+ +
+ + {/* Compilation Targets Table */} +
+

Compilation Targets

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TargetExtensionUse CaseStatus
JavaScript.jsWeb applications, Node.js backendsReady
Roblox (Lua).luaRoblox gamesReady
UEFN (Verse).verseFortnite CreativeComing Soon
Unity (C#).csUnity games, VRChatComing Soon
+
+
+ + {/* Keywords Reference */} +
+

Keywords Reference

+
+ + + Declarations + + +
reality - Define a namespace
+
journey - Define a function
+
let - Declare a variable
+
import - Import from libraries
+
+
+ + + Control Flow + + +
when - Conditional (if)
+
otherwise - Else clause
+
return - Return from journey
+
+
+ + + Cross-Platform + + +
sync ... across - Sync data
+
platform: - Target platforms
+
platforms: - Reality platforms
+
+
+ + + Actions + + +
notify - Output message
+
reveal - Return/expose data
+
new - Create instance
+
+
+
+
+ + {/* Navigation */} +
+ + ← Quick Start + + + CLI Reference → + +
+
+ ); +}