Dynamic import("./server") resolves relative to Vite's .vite-temp/
compilation dir, not the project root. ssrLoadModule resolves from
/app root and processes TypeScript correctly.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Remove redirect_uri from Discord token exchange (Activities use proxy auth, not redirect flow)
- Add Content-Security-Policy with frame-ancestors for Discord embedding (was only in vercel.json)
- Wire up subscription create-checkout and manage routes in Express
- Add Studio arm to ArmSwitcher with external link
- Prevent SPA catch-all from serving HTML for missing static assets (fixes script.js Unexpected token error)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Crawlers (Twitter, Discord, Slack) don't execute JavaScript, so the
client-side SEO.tsx useEffect was invisible to them. Every page looked
identical — the hardcoded homepage defaults in index.html.
- node-build.ts: replace simple sendFile with async SSR meta middleware
that injects per-route title/description/og:*/twitter:* before sending
HTML. Static route map covers ~15 routes; dynamic lookup queries
Supabase for /projects/:uuid (title, description, image_url) and
/passport/:username (full_name, bio) so shared project/profile links
render correct cards in Discord/Twitter/Slack unfurls.
- index.html: add twitter:site @aethexcorp; SSO.tsx useEffect still
runs for browser tab updates.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add StaffSubdomainRedirect component: when accessed via staff.aethex.tech,
auto-redirects to /staff prefix so the subdomain serves the right content
- nginx config updated to proxy to aethex-forge (port 5050) instead of
dead port 5054
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
staff.aethex.tech doesn't exist. Re-wired /staff and /candidate to the
existing page components already in the codebase:
Staff: Staff, StaffLogin, StaffDashboard, StaffAdmin, StaffChat,
StaffDocs, StaffDirectory, StaffAchievements, StaffTimeTracking
Candidate: CandidatePortal, CandidateInterviews, CandidateOffers,
CandidateProfile
Unbuilt staff sub-routes (/staff/announcements etc.) now fall back to
/staff/dashboard instead of 404ing through a dead external domain.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Narrow the unhandledrejection error handler: removed "unauthorized"
and "auth/" patterns which were too broad and cleared sessions on
unrelated API 401s or any URL containing "auth/". Now only matches
specific Supabase strings (invalid refresh token, jwt expired, etc.)
- Wire up the Remember Me checkbox in Login — was purely decorative
before. Defaults to checked, stores aethex_remember_me in localStorage
- Authentik SSO callback now sets a 30-day cookie so SSO sessions
survive browser restarts (AuthContext promotes it to localStorage)
- AuthContext clears local session on load if remember-me flag is absent
(respects user's choice to not stay logged in)
- signOut now removes aethex_remember_me from localStorage
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Auth & SSO
- Wire Authentik (auth.aethex.tech) as OIDC PKCE SSO provider
- Server-side only flow with HMAC-signed stateless state token
- Account linking via authentik_sub in user metadata
- AeThex ID connection card in Dashboard connections tab
- Unlink endpoint POST /api/auth/authentik/unlink
- Fix node:https helper to bypass undici DNS bug on Node 18
- Fix resolv.conf to use 1.1.1.1/8.8.8.8 in container
Schema & types
- Regenerate database.types.ts from live Supabase schema (23k lines)
- Fix 511 TypeScript errors caused by stale 582-line types file
- Fix UserProfile import in aethex-database-adapter.ts
- Add notifications migration (title, message, read columns)
Server fixes
- Remove badge_color from achievements seed/upsert (column doesn't exist)
- Rename name→title, add slug field in achievements seed
- Remove email from all user_profiles select queries (column doesn't exist)
- Fix email-based achievement target lookup via auth.admin.listUsers
- Add GET /api/projects/:projectId endpoint
- Fix import.meta.dirname → fileURLToPath for Node 18 compatibility
- Expose VITE_APP_VERSION from package.json at build time
Navigation systems
- DevPlatformNav: reorganize into Learn/Build grouped dropdowns with descriptions
- Migrate all 11 dev-platform pages from main Layout to DevPlatformLayout
- Remove dead isDevMode context nav swap from main Layout
- EthosLayout: purple-accented tab bar (Library, Artists, Licensing, Settings)
with member-only gating and guest CTA — migrate 4 Ethos pages
- GameForgeLayout: orange-branded sidebar with Studio section and lock icons
for unauthenticated users — migrate GameForge + GameForgeDashboard
- SysBar: live latency ping, status dot (green/yellow/red), real version
Layout dropdown
- Role-gate Admin (owner/admin/founder only) and Internal Docs (+ staff)
- Add Internal section label with separator
- Fix settings link from /dashboard?tab=profile#settings to /dashboard?tab=settings
Project pages
- Add ProjectDetail page at /projects/:projectId
- Fix ProfilePassport "View mission" link from /projects/new to /projects/:id
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- TabsList: Add responsive grid columns (grid-cols-2/3 on mobile)
- Headers: Stack vertically on mobile with responsive text sizes
- Dialogs: Use viewport-relative heights (70-80vh on mobile)
- Grids: Add sm: breakpoints for single-column mobile layouts
- Tables: Add overflow-x-auto for horizontal scrolling
- Buttons: Full-width on mobile with flex-1 sm:flex-none
- Select triggers: Full-width on mobile
Files updated: 21 component and page files across admin,
staff, dashboards, and hub sections.
OKR Management:
- Database tables for OKRs, key results, and check-ins
- Full CRUD API with progress auto-calculation
- UI with quarter/year filtering, create/edit dialogs
- Key result progress tracking with status indicators
- Trigger to auto-update OKR progress from key results
Time Tracking:
- Database tables for time entries and timesheets
- API with timer start/stop, manual entry creation
- Week/month/all view with grouped entries by date
- Stats for total hours, billable hours, avg per day
- Real-time timer with running indicator
Both features include RLS policies and proper indexes.
- StaffLearningPortal: Fetches courses from /api/staff/courses, supports
starting courses and tracking progress
- StaffPerformanceReviews: Fetches reviews from /api/staff/reviews,
supports adding employee comments with dialog
- StaffKnowledgeBase: Fetches articles from /api/staff/knowledge-base,
supports search, filtering, view tracking, and helpful marking
- StaffProjectTracking: Fetches projects from /api/staff/projects,
supports task status updates and creating new tasks
- StaffInternalMarketplace: Now points marketplace with /api/staff/marketplace,
supports redeeming items with points and viewing orders
- StaffTeamHandbook: Fetches handbook sections from /api/staff/handbook,
displays grouped by category with expand/collapse
All pages now use real Supabase data instead of mock arrays.
- Add database migration for staff features (announcements, expenses,
courses, reviews, knowledge base, projects, marketplace, handbook)
- Add 8 new API endpoints: announcements, expenses, courses, reviews,
knowledge-base, projects, marketplace, handbook
- Update StaffAnnouncements.tsx to use real API with read tracking
- Update StaffExpenseReports.tsx to use real API with submit dialog
More staff pages to be updated in next commit.
Foundation content now lives at aethex.foundation. This page:
- Shows brief informational overview
- Auto-redirects to aethex.foundation after 10 seconds
- Provides quick links to GameForge, Mentorship, Community, and Axiom
- Maintains Foundation branding while directing users to new home
- Add CandidateInterviews.tsx with interview list, filtering by status,
meeting type badges, and join meeting buttons
- Add CandidateOffers.tsx with offer management, accept/decline dialogs,
expiry warnings, and salary formatting
- Add routes to App.tsx for /candidate, /candidate/profile,
/candidate/interviews, /candidate/offers
- Add database migration for candidate_profiles, candidate_interviews,
and candidate_offers tables with RLS policies
- Add API endpoints: /api/candidate/profile, /api/candidate/interviews,
/api/candidate/offers
- Add CandidatePortal.tsx main dashboard with stats, quick actions,
upcoming interviews, and pending offers
- Add CandidateProfile.tsx profile builder with tabs for basic info,
work experience, education, and portfolio links
- Add StaffOnboarding.tsx main hub with welcome banner, progress ring,
and quick action cards
- Add StaffOnboardingChecklist.tsx with interactive Day 1/Week 1/Month 1
checklist that saves progress to database
- Add database migration for staff_onboarding_progress and
staff_onboarding_metadata tables with RLS policies
- Add API endpoint /api/staff/onboarding for fetching and updating
onboarding progress with admin view for managers
- Add routes to App.tsx for /staff/onboarding and /staff/onboarding/checklist
- Reduced all max-w-7xl containers to max-w-6xl for better readability
- Applied design system standards to GameForge (hero, stats, features, team sections)
- Updated Dashboard main container width
- Normalized Blog page section widths (filter, insights, posts, newsletter)
- Improved visual consistency across high-traffic pages
- Created design-tokens.ts with standardized width, typography, spacing, padding, and grid constants
- Reduced max-w-7xl to max-w-6xl across homepage and major landing pages (Index, Labs, Realms, Foundation)
- Reduced oversized hero text-7xl to text-6xl for better readability
- Applied consistent design standards to dev platform pages (Templates, Marketplace, CodeExamples, DevLanding)
- Improved visual consistency and content readability site-wide
- Created comprehensive integration docs for Spatial (5M+ visitors, web-based)
- Created comprehensive integration docs for Decentraland (800K+ users, Ethereum)
- Created comprehensive integration docs for The Sandbox (2M+ players, Polygon)
- Updated DocsIntegrations page with new platform showcase cards
- Added routes for /docs/integrations/spatial, /decentraland, /thesandbox
- Updated homepage to mention all 8 supported platforms explicitly
- Each integration includes: Quick start, code examples, auth flows, best practices
- Create VRChat integration docs with Udon C# examples
- Create RecRoom integration docs with Circuits visual scripting
- Add VRChat and RecRoom to homepage cross-platform claims
- Add routes for /docs/integrations/vrchat and /docs/integrations/recroom
- Update DocsIntegrations page with platform showcase cards
- Include authentication flows, code examples, and best practices
- Cover 30K+ VRChat users and 3M+ RecRoom MAU
Closes the gap in cross-platform social VR support
- Remove auto-redirect countdown from GameForge, Labs, Foundation
- Add TL;DR collapsible sections in hero for quick info
- Add exit intent modals (triggered on mouse leave)
- Update sticky banners to be persistent (no countdown)
- Maintain multiple CTAs throughout pages
- Support 4 user personas: Impatient, Scanner, Researcher, Undecided
- Add breadcrumbs to all developer platform pages for better navigation context
- Add 'Main Dashboard' link to developer mode navigation for easy exit
- Add prominent developer CTA card to main dashboard to increase discovery
- Wrap developer dashboard route with RequireAccess for authentication
User Flow Improvements:
✓ Users can now easily navigate back to main dashboard from dev platform
✓ Breadcrumbs show clear path: Home > Developer Platform > Current Page
✓ New users see attractive CTA with API keys, docs, and templates links
✓ Authentication enforced on /dev-platform/dashboard
Files changed: 9 (Layout, Dashboard, and 7 dev-platform pages)