diff --git a/client/App.tsx b/client/App.tsx index 4ddfbc21..8c0608f1 100644 --- a/client/App.tsx +++ b/client/App.tsx @@ -364,11 +364,20 @@ const App = () => ( {/* Staff Arm Routes */} } /> } /> - } /> - } /> + } + /> + } + /> } /> } /> - } /> + } + /> } /> } /> diff --git a/client/components/ArmSwitcher.tsx b/client/components/ArmSwitcher.tsx index 640d460d..ae4e163c 100644 --- a/client/components/ArmSwitcher.tsx +++ b/client/components/ArmSwitcher.tsx @@ -80,7 +80,8 @@ const ARMS: Arm[] = [ ]; const LOGO_URLS: Record = { - staff: "https://cdn.builder.io/api/v1/image/assets%2Ffc53d607e21d497595ac97e0637001a1%2Fc0414efd7af54ef4b821a05d469150d0?format=webp&width=800", + staff: + "https://cdn.builder.io/api/v1/image/assets%2Ffc53d607e21d497595ac97e0637001a1%2Fc0414efd7af54ef4b821a05d469150d0?format=webp&width=800", labs: "https://cdn.builder.io/api/v1/image/assets%2Ffc53d607e21d497595ac97e0637001a1%2F85fe7910cff6483db1ea99c154684844?format=webp&width=800", gameforge: "https://cdn.builder.io/api/v1/image/assets%2Ffc53d607e21d497595ac97e0637001a1%2Fcd3534c1caa0497abfd44224040c6059?format=webp&width=800", @@ -168,7 +169,10 @@ export default function ArmSwitcher() { {/* Modal for mobile fullscreen arm switching */} - setIsModalOpen(false)} /> + setIsModalOpen(false)} + /> ); } diff --git a/client/components/ArmSwitcherModal.tsx b/client/components/ArmSwitcherModal.tsx index cdf83f24..be68b063 100644 --- a/client/components/ArmSwitcherModal.tsx +++ b/client/components/ArmSwitcherModal.tsx @@ -87,7 +87,8 @@ const ARMS: Arm[] = [ ]; const LOGO_URLS: Record = { - staff: "https://cdn.builder.io/api/v1/image/assets%2Ffc53d607e21d497595ac97e0637001a1%2Fc0414efd7af54ef4b821a05d469150d0?format=webp&width=800", + staff: + "https://cdn.builder.io/api/v1/image/assets%2Ffc53d607e21d497595ac97e0637001a1%2Fc0414efd7af54ef4b821a05d469150d0?format=webp&width=800", labs: "https://cdn.builder.io/api/v1/image/assets%2Ffc53d607e21d497595ac97e0637001a1%2F85fe7910cff6483db1ea99c154684844?format=webp&width=800", gameforge: "https://cdn.builder.io/api/v1/image/assets%2Ffc53d607e21d497595ac97e0637001a1%2Fcd3534c1caa0497abfd44224040c6059?format=webp&width=800", diff --git a/client/components/Layout.tsx b/client/components/Layout.tsx index f71d3b61..75257e74 100644 --- a/client/components/Layout.tsx +++ b/client/components/Layout.tsx @@ -52,7 +52,8 @@ const ARMS = [ ]; const ARM_LOGOS: Record = { - staff: "https://cdn.builder.io/api/v1/image/assets%2Ffc53d607e21d497595ac97e0637001a1%2Fc0414efd7af54ef4b821a05d469150d0?format=webp&width=800", + staff: + "https://cdn.builder.io/api/v1/image/assets%2Ffc53d607e21d497595ac97e0637001a1%2Fc0414efd7af54ef4b821a05d469150d0?format=webp&width=800", labs: "https://cdn.builder.io/api/v1/image/assets%2Ffc53d607e21d497595ac97e0637001a1%2F85fe7910cff6483db1ea99c154684844?format=webp&width=800", gameforge: "https://cdn.builder.io/api/v1/image/assets%2Ffc53d607e21d497595ac97e0637001a1%2Fcd3534c1caa0497abfd44224040c6059?format=webp&width=800", diff --git a/client/pages/Login.tsx b/client/pages/Login.tsx index 33aa63fb..bf56df26 100644 --- a/client/pages/Login.tsx +++ b/client/pages/Login.tsx @@ -230,8 +230,7 @@ export default function Login() { console.error("Web3 error:", error); toastError({ title: "Web3 verification failed", - description: - error?.message || "Could not verify your wallet signature", + description: error?.message || "Could not verify your wallet signature", }); } }; @@ -245,11 +244,7 @@ export default function Login() {
diff --git a/client/pages/Staff.tsx b/client/pages/Staff.tsx index 9e830147..f21bfe5d 100644 --- a/client/pages/Staff.tsx +++ b/client/pages/Staff.tsx @@ -4,7 +4,13 @@ import Layout from "@/components/Layout"; import SEO from "@/components/SEO"; import { useAuth } from "@/contexts/AuthContext"; import { Button } from "@/components/ui/button"; -import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; +import { + Card, + CardContent, + CardDescription, + CardHeader, + CardTitle, +} from "@/components/ui/card"; import { Badge } from "@/components/ui/badge"; import { Lock, Users, FileText, Zap, Award, MessageSquare } from "lucide-react"; @@ -45,8 +51,9 @@ export default function Staff() {

- The internal hub for AeThex employees and authorized contractors. - Unified access to dashboards, tools, documentation, and collaboration features. + The internal hub for AeThex employees and authorized contractors. + Unified access to dashboards, tools, documentation, and + collaboration features.

@@ -88,7 +95,8 @@ export default function Staff() { - Real-time operations metrics, service status, and quick access to common tools. + Real-time operations metrics, service status, and quick + access to common tools. @@ -105,7 +113,8 @@ export default function Staff() { - Browse team members, view profiles, and find contact information. + Browse team members, view profiles, and find contact + information. @@ -117,12 +126,15 @@ export default function Staff() {
- Admin Tools + + Admin Tools +
- Manage users, roles, permissions, and platform configuration. + Manage users, roles, permissions, and platform + configuration. @@ -139,7 +151,8 @@ export default function Staff() { - Internal documentation, API keys, credentials, and setup guides. + Internal documentation, API keys, credentials, and setup + guides. @@ -151,12 +164,15 @@ export default function Staff() {
- Achievements + + Achievements +
- Track team accomplishments, milestones, and performance metrics. + Track team accomplishments, milestones, and performance + metrics. @@ -168,7 +184,9 @@ export default function Staff() {
- Collaboration + + Collaboration + @@ -184,7 +202,9 @@ export default function Staff() {
-

Who Can Access?

+

+ Who Can Access? +

  • @@ -202,7 +222,9 @@ export default function Staff() {
-

Getting Started

+

+ Getting Started +

  1. 1. diff --git a/client/pages/StaffLogin.tsx b/client/pages/StaffLogin.tsx index f67ab0d6..f53da307 100644 --- a/client/pages/StaffLogin.tsx +++ b/client/pages/StaffLogin.tsx @@ -75,7 +75,7 @@ export default function StaffLogin() { if (!isAethexDev) { // Email is not @aethex.dev - show error setErrorFromUrl( - "Only @aethex.dev email addresses can access the Staff Portal. If you're an authorized contractor, please use your assigned contractor email." + "Only @aethex.dev email addresses can access the Staff Portal. If you're an authorized contractor, please use your assigned contractor email.", ); toastError({ title: "Access Denied", @@ -114,10 +114,7 @@ export default function StaffLogin() { return ( - +
    @@ -159,7 +156,9 @@ export default function StaffLogin() { className="w-full bg-white hover:bg-slate-100 text-slate-900 font-semibold" > - {isLoading ? "Signing in..." : "Sign in with Google"} + + {isLoading ? "Signing in..." : "Sign in with Google"} +
    @@ -188,7 +187,10 @@ export default function StaffLogin() {

    Public login available at{" "} - + aethex.dev/login

    diff --git a/client/pages/staff/StaffAchievements.tsx b/client/pages/staff/StaffAchievements.tsx index 36ffa3c4..4ea9e845 100644 --- a/client/pages/staff/StaffAchievements.tsx +++ b/client/pages/staff/StaffAchievements.tsx @@ -2,7 +2,13 @@ import { useEffect, useState } from "react"; import Layout from "@/components/Layout"; import { useAuth } from "@/contexts/AuthContext"; import { useNavigate } from "react-router-dom"; -import { Card, CardContent, CardHeader, CardTitle, CardDescription } from "@/components/ui/card"; +import { + Card, + CardContent, + CardHeader, + CardTitle, + CardDescription, +} from "@/components/ui/card"; import { Badge } from "@/components/ui/badge"; import { Progress } from "@/components/ui/progress"; import { Trophy, Zap, Users, Target } from "lucide-react"; @@ -61,7 +67,12 @@ export default function StaffAchievements() { } }, [user, loading, navigate]); - if (loading) return
    Loading...
    ; + if (loading) + return ( + +
    Loading...
    +
    + ); return ( @@ -69,14 +80,18 @@ export default function StaffAchievements() {

    Achievements

    -

    Track team accomplishments and milestones

    +

    + Track team accomplishments and milestones +

    {/* Stats */}
    -
    Total Achievements
    +
    + Total Achievements +
    4
    @@ -97,7 +112,9 @@ export default function StaffAchievements() { -
    Completion Rate
    +
    + Completion Rate +
    50%
    @@ -133,7 +150,11 @@ export default function StaffAchievements() { />
    - + {achievement.title} @@ -149,20 +170,27 @@ export default function StaffAchievements() {
    - {!achievement.earned && achievement.progress !== undefined && ( -
    -
    - Progress - - {achievement.progress}% - + {!achievement.earned && + achievement.progress !== undefined && ( +
    +
    + + Progress + + + {achievement.progress}% + +
    +
    - -
    - )} + )} {achievement.earnedDate && (

    - Earned on {new Date(achievement.earnedDate).toLocaleDateString()} + Earned on{" "} + {new Date(achievement.earnedDate).toLocaleDateString()}

    )} diff --git a/client/pages/staff/StaffAdmin.tsx b/client/pages/staff/StaffAdmin.tsx index 00346b6b..53c1aa47 100644 --- a/client/pages/staff/StaffAdmin.tsx +++ b/client/pages/staff/StaffAdmin.tsx @@ -2,10 +2,23 @@ import { useEffect } from "react"; import Layout from "@/components/Layout"; import { useAuth } from "@/contexts/AuthContext"; import { useNavigate } from "react-router-dom"; -import { Card, CardContent, CardHeader, CardTitle, CardDescription } from "@/components/ui/card"; +import { + Card, + CardContent, + CardHeader, + CardTitle, + CardDescription, +} from "@/components/ui/card"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; -import { Users, Shield, Settings, GitBranch, Eye, RefreshCw } from "lucide-react"; +import { + Users, + Shield, + Settings, + GitBranch, + Eye, + RefreshCw, +} from "lucide-react"; export default function StaffAdmin() { const { user, roles, loading } = useAuth(); @@ -17,14 +30,19 @@ export default function StaffAdmin() { return; } const isAdmin = roles?.some((r) => - ["owner", "admin", "founder"].includes(r.toLowerCase()) + ["owner", "admin", "founder"].includes(r.toLowerCase()), ); if (!isAdmin) { navigate("/staff/dashboard"); } }, [user, roles, loading, navigate]); - if (loading) return
    Loading...
    ; + if (loading) + return ( + +
    Loading...
    +
    + ); return ( @@ -32,7 +50,9 @@ export default function StaffAdmin() {

    Admin Tools

    -

    Manage users, roles, and platform configuration

    +

    + Manage users, roles, and platform configuration +

    @@ -45,7 +65,9 @@ export default function StaffAdmin() { Users - Manage team members and roles + + Manage team members and roles +
    @@ -65,7 +87,9 @@ export default function StaffAdmin() { Permissions - Configure role-based access + + Configure role-based access +
    @@ -85,7 +109,9 @@ export default function StaffAdmin() { Settings - Platform configuration + + Platform configuration +
    @@ -105,7 +131,9 @@ export default function StaffAdmin() { API Keys - Manage authentication tokens + + Manage authentication tokens +
@@ -125,7 +153,9 @@ export default function StaffAdmin() { Audit Log - Platform activity history + + Platform activity history +
@@ -145,7 +175,9 @@ export default function StaffAdmin() { Maintenance - System operations + + System operations + diff --git a/client/pages/staff/StaffChat.tsx b/client/pages/staff/StaffChat.tsx index cd204905..afe8ce64 100644 --- a/client/pages/staff/StaffChat.tsx +++ b/client/pages/staff/StaffChat.tsx @@ -2,7 +2,13 @@ import { useEffect } from "react"; import Layout from "@/components/Layout"; import { useAuth } from "@/contexts/AuthContext"; import { useNavigate } from "react-router-dom"; -import { Card, CardContent, CardHeader, CardTitle, CardDescription } from "@/components/ui/card"; +import { + Card, + CardContent, + CardHeader, + CardTitle, + CardDescription, +} from "@/components/ui/card"; import { Button } from "@/components/ui/button"; import { Badge } from "@/components/ui/badge"; import { MessageSquare, Users, Hash, Lock, Plus } from "lucide-react"; @@ -57,7 +63,12 @@ export default function StaffChat() { } }, [user, loading, navigate]); - if (loading) return
Loading...
; + if (loading) + return ( + +
Loading...
+
+ ); return ( @@ -65,7 +76,9 @@ export default function StaffChat() {

Team Chat

-

Internal collaboration and team discussions

+

+ Internal collaboration and team discussions +

@@ -160,9 +173,12 @@ export default function StaffChat() {
-

Sarah Johnson

+

+ Sarah Johnson +

- Welcome to the internal team chat! This is where we collaborate and share updates. + Welcome to the internal team chat! This is where we + collaborate and share updates.

10:30 AM

@@ -171,9 +187,12 @@ export default function StaffChat() {
-

Mike Chen

+

+ Mike Chen +

- Great! Looking forward to building amazing things together. + Great! Looking forward to building amazing things + together.

10:35 AM

@@ -187,7 +206,9 @@ export default function StaffChat() { placeholder="Type a message..." className="flex-1 px-4 py-2 rounded bg-slate-800 border border-slate-700 text-white placeholder-slate-500 focus:outline-none focus:border-purple-500" /> - +
@@ -201,18 +222,10 @@ export default function StaffChat() { -

- • Full-featured internal messaging platform -

-

- • Channels for teams and projects -

-

- • Direct messages and group chats -

-

- • File sharing and integrations -

+

• Full-featured internal messaging platform

+

• Channels for teams and projects

+

• Direct messages and group chats

+

• File sharing and integrations

diff --git a/client/pages/staff/StaffDirectory.tsx b/client/pages/staff/StaffDirectory.tsx index 39b2bdf4..2af544e7 100644 --- a/client/pages/staff/StaffDirectory.tsx +++ b/client/pages/staff/StaffDirectory.tsx @@ -71,21 +71,30 @@ export default function StaffDirectory() { (member) => member.full_name.toLowerCase().includes(query) || member.email.toLowerCase().includes(query) || - member.department?.toLowerCase().includes(query) + member.department?.toLowerCase().includes(query), ); setFilteredMembers(filtered); } }, [searchQuery, staffMembers]); - if (loading) return
Loading...
; + if (loading) + return ( + +
Loading...
+
+ ); return (
-

Team Directory

-

Find and connect with AeThex team members

+

+ Team Directory +

+

+ Find and connect with AeThex team members +

{/* Search Bar */} @@ -105,7 +114,9 @@ export default function StaffDirectory() { {/* Results */} {isLoading ? ( -
Loading team members...
+
+ Loading team members... +
) : filteredMembers.length === 0 ? (
No staff members found matching your search @@ -120,8 +131,12 @@ export default function StaffDirectory() {
- {member.full_name} -

{member.position || "Team Member"}

+ + {member.full_name} + +

+ {member.position || "Team Member"} +

{member.role && ( @@ -143,7 +158,10 @@ export default function StaffDirectory() { {member.phone && ( @@ -163,7 +181,8 @@ export default function StaffDirectory() { {/* Stats */}

- Showing {filteredMembers.length} of {staffMembers.length} team members + Showing {filteredMembers.length} of {staffMembers.length} team + members

diff --git a/client/pages/staff/StaffDocs.tsx b/client/pages/staff/StaffDocs.tsx index 1f2af5fb..49dc0c34 100644 --- a/client/pages/staff/StaffDocs.tsx +++ b/client/pages/staff/StaffDocs.tsx @@ -2,7 +2,13 @@ import { useEffect } from "react"; import Layout from "@/components/Layout"; import { useAuth } from "@/contexts/AuthContext"; import { useNavigate } from "react-router-dom"; -import { Card, CardContent, CardHeader, CardTitle, CardDescription } from "@/components/ui/card"; +import { + Card, + CardContent, + CardHeader, + CardTitle, + CardDescription, +} from "@/components/ui/card"; import { Button } from "@/components/ui/button"; import { Badge } from "@/components/ui/badge"; import { FileText, Key, Database, Code2, ExternalLink } from "lucide-react"; @@ -17,7 +23,12 @@ export default function StaffDocs() { } }, [user, loading, navigate]); - if (loading) return
Loading...
; + if (loading) + return ( + +
Loading...
+
+ ); const docs = [ { @@ -57,13 +68,19 @@ export default function StaffDocs() {
-

Documentation & API

-

Internal docs, API keys, and credentials

+

+ Documentation & API +

+

+ Internal docs, API keys, and credentials +

{/* Documentation */}
-

Documentation

+

+ Documentation +

{docs.map((doc, idx) => { const IconComponent = doc.icon; @@ -79,7 +96,9 @@ export default function StaffDocs() {
- {doc.title} + + {doc.title} + {doc.description} @@ -88,7 +107,10 @@ export default function StaffDocs() {
- @@ -116,13 +138,19 @@ export default function StaffDocs() { >

{key.name}

-

{key.key}

+

+ {key.key} +

{key.status} -