aethex-forge/replit.md
sirpiglr a283e81c5e Add a secure bot management panel and new Discord commands
Implement server-side proxy endpoints for bot management, add admin token authentication, and introduce new Discord slash commands for help, stats, leaderboards, and posting.

Replit-Commit-Author: Agent
Replit-Commit-Session-Id: 9203795e-937a-4306-b81d-b4d5c78c240e
Replit-Commit-Checkpoint-Type: full_checkpoint
Replit-Commit-Event-Id: f0eccab4-b258-4b1c-a2a5-e7b2b3c56c44
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/7c94b7a0-29c7-4f2e-94ef-44b2153872b7/9203795e-937a-4306-b81d-b4d5c78c240e/ryY0zvi
Replit-Helium-Checkpoint-Created: true
2025-12-04 02:44:05 +00:00

9.8 KiB

AeThex - Advanced Development Platform

Project Overview

AeThex is a full-stack web application built with React, Vite, Express, and Supabase. It's an advanced development platform and community for builders featuring project collaboration, mentorship programs, research labs, and more.

Tech Stack

  • Frontend: React 18 + TypeScript
  • Build Tool: Vite 6
  • Backend: Express.js (integrated with Vite dev server)
  • Database: Supabase (PostgreSQL)
  • Styling: Tailwind CSS
  • UI Components: Radix UI
  • State Management: TanStack Query
  • Routing: React Router DOM

Project Structure

├── client/           # React frontend code
│   ├── components/   # React components
│   ├── pages/        # Page components
│   ├── lib/          # Utility libraries
│   ├── hooks/        # Custom React hooks
│   └── contexts/     # React contexts
├── server/           # Express backend
│   └── index.ts      # Main server file with API routes
├── api/              # API route handlers
├── discord-bot/      # Discord bot integration
├── docs/             # Documentation files
└── shared/           # Shared code between client/server

Environment Setup

Required Environment Variables

The following Supabase environment variables need to be configured:

  • VITE_SUPABASE_URL - Your Supabase project URL
  • VITE_SUPABASE_ANON_KEY - Your Supabase anonymous key

Optional variables for full functionality:

  • VITE_SUPABASE_SERVICE_ROLE_KEY - Service role key for admin operations
  • Discord-related variables (see .env.discord.example)
  • Foundation OAuth variables (see .env.foundation-oauth.example)

Development

npm install          # Install dependencies
npm run dev         # Start development server on port 5000

Production Build

npm run build       # Build all components (API, client, server)
npm start           # Start production server

Replit Configuration

Development

  • The development server runs on port 5000 (required for Replit's webview)
  • Host is set to 0.0.0.0 to allow Replit proxy access
  • allowedHosts: true configured to allow Replit's dynamic proxy hostnames
  • Vite HMR is configured for proper hot reload in Replit environment

Deployment

  • Deployment type: Autoscale
  • Build command: npm run build
  • Run command: npm start
  • The production build serves the client from dist/spa and runs the Express server from dist/server

Key Features

  • Multi-Realm System: Labs, GameForge, Corp, Foundation, Dev-Link
  • Community Features: Feed, posts, comments, likes
  • Creator Network: Profile passports, achievements, mentorship
  • Nexus Marketplace: Opportunities, contracts, commissions
  • Discord Integration: Bot commands, OAuth, role management
  • Ethos Guild: Music licensing and artist services
  • GameForge: Sprint management, team collaboration
  • Foundation: Courses, mentorship programs, achievements

Discord Bot Integration

Bot Details

  • Bot Name: AeThex#9389
  • Workflow: "Discord Bot" runs alongside main application
  • Health Check: Port 8044

Slash Commands

Command Description
/verify Link Discord account to AeThex
/profile View AeThex profile
/set-realm Set preferred realm
/unlink Unlink Discord from AeThex
/verify-role Verify Discord roles

Database Tables

  • discord_verifications - Temporary verification codes (15 min expiry)
  • discord_links - Permanent Discord-to-AeThex account links

Required Secrets

  • DISCORD_BOT_TOKEN - Bot token from Discord Developer Portal
  • DISCORD_CLIENT_ID - Application client ID
  • SUPABASE_SERVICE_ROLE - Service role key for database operations

Domain Architecture

Identity Authority

  • aethex.foundation - Single Source of Truth (SSOT) for all identity/passport data
  • All platforms are OAuth clients consuming Foundation-issued identities

Domain Routing

Domain Purpose
aethex.dev Main application platform
aethex.foundation Identity authority, passport API
*.aethex.me Creator Passports (wildcard subdomains)
*.aethex.space Project Passports (wildcard subdomains)
aethex.app, .locker, .site Redirect to aethex.dev
aethex.studio Redirect to aethex.dev/ethos
aethex.info Redirect to aethex.dev/foundation

Passport API Flow

user.aethex.me → fetches from https://aethex.foundation/api/passport/subdomain/{user}
project.aethex.space → fetches from https://aethex.foundation/api/passport/project/{slug}

Discord OAuth Configuration

Discord Developer Portal (OAuth2 > Redirects)

https://aethex.dev/api/discord/oauth/callback
https://aethex.foundation/api/discord/oauth/callback
https://supabase.aethex.tech/auth/v1/callback

Supabase Dashboard (Authentication > URL Configuration)

  • Site URL: https://aethex.foundation
  • Redirect URLs:
    • https://aethex.dev/**
    • https://aethex.foundation/**
    • https://supabase.aethex.tech/auth/v1/callback

Recent Changes (December 4, 2025)

  • Bot Panel (/bot-panel): Comprehensive Discord bot management dashboard
    • Overview tab: Bot info, feed bridge stats, uptime
    • Servers tab: All connected Discord servers with member counts
    • Commands tab: All slash commands with "Register Commands" button
    • Linked Users tab: Discord-linked AeThex users (sanitized PII)
    • Feed tab: Recent feed activity from Discord and website
    • Protected with admin token authentication
  • New Discord Slash Commands: Added 4 new commands
    • /help - Shows all bot commands with descriptions
    • /stats - View your AeThex statistics (posts, likes, comments)
    • /leaderboard - Top contributors with category filter (posts, likes, creators)
    • /post - Create a post directly from Discord with category and image support
  • Bot API Security: Added authentication and CORS to management endpoints
    • All management endpoints require admin token
    • PII sanitized in linked users endpoint
    • CORS headers added for browser access
    • Server-side proxy endpoints (/api/discord/bot-*) to keep admin token secure
    • Client uses proxied endpoints - no tokens exposed in frontend bundle

Recent Changes (December 3, 2025)

  • Discord Feed Bridge Bug Fix: Fixed critical 14x duplicate post issue with three-layer protection
    • Added polling lock to prevent overlapping poll cycles
    • Immediate timestamp updates before sending to Discord
    • Processed ID tracking to skip already-sent posts
  • Creator Directory "Become a Creator" Flow: Registration modal for new creators
    • Form validation for username, bio, and primary arm affiliation
    • Pre-fills data from user profile where available
    • Integrates with aethex_creators table in Supabase
  • Dashboard Realm & Settings: Functional realm switching with persistence
    • RealmSwitcher component wired with proper state management
    • Saves realm preference to Supabase database
    • Profile update functionality in Settings tab
  • Toast Notification Fixes: Migrated all calls to use description property
  • Bidirectional Discord-Feed Bridge: Full two-way sync between Discord and AeThex feed
    • Discord → AeThex: Messages from Discord FEED channel sync to community feed
    • AeThex → Discord: Bot polls Supabase every 5 seconds for new posts (works from production!)
    • Bot listens to configured channel (DISCORD_MAIN_CHAT_CHANNELS env var)
    • Posts display with purple Discord badge and channel name
    • Supports images/videos from both platforms
    • Loop prevention: Discord-sourced posts don't re-post back to Discord
    • Architecture: Bot polls community_posts table directly - no HTTP dependency on server
  • Moved /feed to /community/feed: Feed is now a tab within the Community page
    • Old /feed URL redirects to /community/feed
    • Added redirect in vercel.json for production
  • Fixed passport subdomain API to call aethex.foundation (identity authority)
  • Fixed API paths: subdomain-datasubdomain, project-dataproject
  • Restored wildcard rewrites in vercel.json for *.aethex.me and *.aethex.space
  • Added missing routes to vercel.json: /community/, /developers/, /discord-verify/, /ethos/
  • Added catch-all route for future paths
  • Fixed Discord verification code input to accept alphanumeric codes (was filtering out letters)
  • Added step-by-step error tracking to verify-code API for debugging
  • Configured Discord OAuth redirect URLs for multi-domain setup
  • Discord bot running on Replit (moved from Railway)

Recent Changes (December 2, 2025)

  • Configured Vite to run on port 5000 for Replit compatibility
  • Set up proper host configuration (0.0.0.0) for Replit proxy
  • Added allowedHosts: true to allow Replit's dynamic proxy hostnames
  • Updated .gitignore to properly exclude environment files
  • Installed all npm dependencies
  • Configured deployment settings for Replit autoscale
  • Fixed server build to output dist/server/production.mjs for deployment
  • Verified application runs without errors in Replit environment
  • Discord bot (AeThex#9389) running and connected to 7 servers
  • Created discord_verifications and discord_links database tables
  • Registered all 5 slash commands with Discord API
  • Extended auth loading timeout to 30s for slow networks
  • Fixed /community route with wildcard for nested tabs
  • Fixed /developers route showing real user data

Notes

  • Supabase credentials must be configured in Replit Secrets for the app to fully function
  • The application integrates an Express backend directly into the Vite dev server for seamless API development
  • Discord bot runs as a separate workflow on port 8044 (health check only)
  • Main application runs on port 5000