Prettier format pending files

This commit is contained in:
Builder.io 2025-11-10 05:16:52 +00:00
parent d86df67a3c
commit 9a1d1c24f0
12 changed files with 254 additions and 100 deletions

View file

@ -364,11 +364,20 @@ const App = () => (
{/* Staff Arm Routes */}
<Route path="/staff" element={<Staff />} />
<Route path="/staff/login" element={<StaffLogin />} />
<Route path="/staff/dashboard" element={<StaffDashboard />} />
<Route path="/staff/directory" element={<StaffDirectory />} />
<Route
path="/staff/dashboard"
element={<StaffDashboard />}
/>
<Route
path="/staff/directory"
element={<StaffDirectory />}
/>
<Route path="/staff/admin" element={<StaffAdmin />} />
<Route path="/staff/docs" element={<StaffDocs />} />
<Route path="/staff/achievements" element={<StaffAchievements />} />
<Route
path="/staff/achievements"
element={<StaffAchievements />}
/>
<Route path="/staff/chat" element={<StaffChat />} />
<Route path="/support" element={<Support />} />

View file

@ -80,7 +80,8 @@ const ARMS: Arm[] = [
];
const LOGO_URLS: Record<string, string> = {
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() {
</div>
{/* Modal for mobile fullscreen arm switching */}
<ArmSwitcherModal isOpen={isModalOpen} onClose={() => setIsModalOpen(false)} />
<ArmSwitcherModal
isOpen={isModalOpen}
onClose={() => setIsModalOpen(false)}
/>
</>
);
}

View file

@ -87,7 +87,8 @@ const ARMS: Arm[] = [
];
const LOGO_URLS: Record<string, string> = {
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",

View file

@ -52,7 +52,8 @@ const ARMS = [
];
const ARM_LOGOS: Record<string, string> = {
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",

View file

@ -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() {
<SEO
title="Sign In to AeThex"
description="Create or access your AeThex creator account"
image={
window.location.href
? window.location.href
: (undefined as any)
}
image={window.location.href ? window.location.href : (undefined as any)}
/>
<Layout>
<div className="min-h-screen bg-aethex-gradient py-12 flex items-center justify-center">

View file

@ -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() {
</h1>
<p className="text-xl text-purple-200/80 max-w-2xl mx-auto mb-12">
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.
</p>
<div className="flex flex-col sm:flex-row gap-4 justify-center">
@ -88,7 +95,8 @@ export default function Staff() {
</CardHeader>
<CardContent>
<CardDescription className="text-purple-200/70">
Real-time operations metrics, service status, and quick access to common tools.
Real-time operations metrics, service status, and quick
access to common tools.
</CardDescription>
</CardContent>
</Card>
@ -105,7 +113,8 @@ export default function Staff() {
</CardHeader>
<CardContent>
<CardDescription className="text-blue-200/70">
Browse team members, view profiles, and find contact information.
Browse team members, view profiles, and find contact
information.
</CardDescription>
</CardContent>
</Card>
@ -117,12 +126,15 @@ export default function Staff() {
<div className="p-2 rounded bg-indigo-500/20">
<Lock className="h-5 w-5 text-indigo-400" />
</div>
<CardTitle className="text-indigo-100">Admin Tools</CardTitle>
<CardTitle className="text-indigo-100">
Admin Tools
</CardTitle>
</div>
</CardHeader>
<CardContent>
<CardDescription className="text-indigo-200/70">
Manage users, roles, permissions, and platform configuration.
Manage users, roles, permissions, and platform
configuration.
</CardDescription>
</CardContent>
</Card>
@ -139,7 +151,8 @@ export default function Staff() {
</CardHeader>
<CardContent>
<CardDescription className="text-cyan-200/70">
Internal documentation, API keys, credentials, and setup guides.
Internal documentation, API keys, credentials, and setup
guides.
</CardDescription>
</CardContent>
</Card>
@ -151,12 +164,15 @@ export default function Staff() {
<div className="p-2 rounded bg-amber-500/20">
<Award className="h-5 w-5 text-amber-400" />
</div>
<CardTitle className="text-amber-100">Achievements</CardTitle>
<CardTitle className="text-amber-100">
Achievements
</CardTitle>
</div>
</CardHeader>
<CardContent>
<CardDescription className="text-amber-200/70">
Track team accomplishments, milestones, and performance metrics.
Track team accomplishments, milestones, and performance
metrics.
</CardDescription>
</CardContent>
</Card>
@ -168,7 +184,9 @@ export default function Staff() {
<div className="p-2 rounded bg-rose-500/20">
<MessageSquare className="h-5 w-5 text-rose-400" />
</div>
<CardTitle className="text-rose-100">Collaboration</CardTitle>
<CardTitle className="text-rose-100">
Collaboration
</CardTitle>
</div>
</CardHeader>
<CardContent>
@ -184,7 +202,9 @@ export default function Staff() {
<div className="container mx-auto px-4 py-20 border-t border-purple-500/20">
<div className="grid md:grid-cols-2 gap-12">
<div>
<h3 className="text-2xl font-bold mb-4 text-purple-100">Who Can Access?</h3>
<h3 className="text-2xl font-bold mb-4 text-purple-100">
Who Can Access?
</h3>
<ul className="space-y-3 text-purple-200/80">
<li className="flex gap-2">
<span className="text-purple-400"></span>
@ -202,7 +222,9 @@ export default function Staff() {
</div>
<div>
<h3 className="text-2xl font-bold mb-4 text-purple-100">Getting Started</h3>
<h3 className="text-2xl font-bold mb-4 text-purple-100">
Getting Started
</h3>
<ol className="space-y-3 text-purple-200/80">
<li className="flex gap-2">
<span className="text-purple-400">1.</span>

View file

@ -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 (
<Layout>
<SEO
title="Staff Login"
description="AeThex staff and employees only"
/>
<SEO title="Staff Login" description="AeThex staff and employees only" />
<div className="min-h-screen bg-gradient-to-br from-slate-900 via-slate-800 to-slate-900 flex items-center justify-center p-4">
<div className="absolute inset-0 opacity-10">
@ -159,7 +156,9 @@ export default function StaffLogin() {
className="w-full bg-white hover:bg-slate-100 text-slate-900 font-semibold"
>
<GoogleIcon />
<span>{isLoading ? "Signing in..." : "Sign in with Google"}</span>
<span>
{isLoading ? "Signing in..." : "Sign in with Google"}
</span>
</Button>
</div>
@ -188,7 +187,10 @@ export default function StaffLogin() {
<div className="pt-4 border-t border-slate-700">
<p className="text-xs text-slate-500 text-center">
Public login available at{" "}
<a href="/login" className="text-purple-400 hover:text-purple-300">
<a
href="/login"
className="text-purple-400 hover:text-purple-300"
>
aethex.dev/login
</a>
</p>

View file

@ -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 <Layout><div className="container py-20">Loading...</div></Layout>;
if (loading)
return (
<Layout>
<div className="container py-20">Loading...</div>
</Layout>
);
return (
<Layout>
@ -69,14 +80,18 @@ export default function StaffAchievements() {
<div className="container mx-auto px-4 py-12">
<div className="mb-8">
<h1 className="text-4xl font-bold text-white mb-2">Achievements</h1>
<p className="text-slate-400">Track team accomplishments and milestones</p>
<p className="text-slate-400">
Track team accomplishments and milestones
</p>
</div>
{/* Stats */}
<div className="grid md:grid-cols-4 gap-6 mb-12">
<Card className="border-slate-700/50 bg-slate-900/50 backdrop-blur">
<CardContent className="p-6">
<div className="text-sm text-slate-400 mb-2">Total Achievements</div>
<div className="text-sm text-slate-400 mb-2">
Total Achievements
</div>
<div className="text-3xl font-bold text-white">4</div>
</CardContent>
</Card>
@ -97,7 +112,9 @@ export default function StaffAchievements() {
<Card className="border-slate-700/50 bg-slate-900/50 backdrop-blur">
<CardContent className="p-6">
<div className="text-sm text-slate-400 mb-2">Completion Rate</div>
<div className="text-sm text-slate-400 mb-2">
Completion Rate
</div>
<div className="text-3xl font-bold text-purple-400">50%</div>
</CardContent>
</Card>
@ -133,7 +150,11 @@ export default function StaffAchievements() {
/>
</div>
<div>
<CardTitle className={achievement.earned ? "text-green-300" : "text-white"}>
<CardTitle
className={
achievement.earned ? "text-green-300" : "text-white"
}
>
{achievement.title}
</CardTitle>
<CardDescription className="text-slate-400 mt-1">
@ -149,20 +170,27 @@ export default function StaffAchievements() {
</div>
</CardHeader>
<CardContent className="space-y-4">
{!achievement.earned && achievement.progress !== undefined && (
<div>
<div className="flex justify-between items-center mb-2">
<span className="text-xs text-slate-400">Progress</span>
<span className="text-xs text-slate-300 font-medium">
{achievement.progress}%
</span>
{!achievement.earned &&
achievement.progress !== undefined && (
<div>
<div className="flex justify-between items-center mb-2">
<span className="text-xs text-slate-400">
Progress
</span>
<span className="text-xs text-slate-300 font-medium">
{achievement.progress}%
</span>
</div>
<Progress
value={achievement.progress}
className="h-2"
/>
</div>
<Progress value={achievement.progress} className="h-2" />
</div>
)}
)}
{achievement.earnedDate && (
<p className="text-xs text-slate-500">
Earned on {new Date(achievement.earnedDate).toLocaleDateString()}
Earned on{" "}
{new Date(achievement.earnedDate).toLocaleDateString()}
</p>
)}
</CardContent>

View file

@ -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 <Layout><div className="container py-20">Loading...</div></Layout>;
if (loading)
return (
<Layout>
<div className="container py-20">Loading...</div>
</Layout>
);
return (
<Layout>
@ -32,7 +50,9 @@ export default function StaffAdmin() {
<div className="container mx-auto px-4 py-12">
<div className="mb-8">
<h1 className="text-4xl font-bold text-white mb-2">Admin Tools</h1>
<p className="text-slate-400">Manage users, roles, and platform configuration</p>
<p className="text-slate-400">
Manage users, roles, and platform configuration
</p>
</div>
<div className="grid md:grid-cols-2 lg:grid-cols-3 gap-6">
@ -45,7 +65,9 @@ export default function StaffAdmin() {
<Users className="h-5 w-5 text-blue-400" />
Users
</CardTitle>
<CardDescription className="text-slate-400">Manage team members and roles</CardDescription>
<CardDescription className="text-slate-400">
Manage team members and roles
</CardDescription>
</div>
</div>
</CardHeader>
@ -65,7 +87,9 @@ export default function StaffAdmin() {
<Shield className="h-5 w-5 text-purple-400" />
Permissions
</CardTitle>
<CardDescription className="text-slate-400">Configure role-based access</CardDescription>
<CardDescription className="text-slate-400">
Configure role-based access
</CardDescription>
</div>
</div>
</CardHeader>
@ -85,7 +109,9 @@ export default function StaffAdmin() {
<Settings className="h-5 w-5 text-indigo-400" />
Settings
</CardTitle>
<CardDescription className="text-slate-400">Platform configuration</CardDescription>
<CardDescription className="text-slate-400">
Platform configuration
</CardDescription>
</div>
</div>
</CardHeader>
@ -105,7 +131,9 @@ export default function StaffAdmin() {
<GitBranch className="h-5 w-5 text-green-400" />
API Keys
</CardTitle>
<CardDescription className="text-slate-400">Manage authentication tokens</CardDescription>
<CardDescription className="text-slate-400">
Manage authentication tokens
</CardDescription>
</div>
</div>
</CardHeader>
@ -125,7 +153,9 @@ export default function StaffAdmin() {
<Eye className="h-5 w-5 text-yellow-400" />
Audit Log
</CardTitle>
<CardDescription className="text-slate-400">Platform activity history</CardDescription>
<CardDescription className="text-slate-400">
Platform activity history
</CardDescription>
</div>
</div>
</CardHeader>
@ -145,7 +175,9 @@ export default function StaffAdmin() {
<RefreshCw className="h-5 w-5 text-red-400" />
Maintenance
</CardTitle>
<CardDescription className="text-slate-400">System operations</CardDescription>
<CardDescription className="text-slate-400">
System operations
</CardDescription>
</div>
</div>
</CardHeader>

View file

@ -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 <Layout><div className="container py-20">Loading...</div></Layout>;
if (loading)
return (
<Layout>
<div className="container py-20">Loading...</div>
</Layout>
);
return (
<Layout>
@ -65,7 +76,9 @@ export default function StaffChat() {
<div className="container mx-auto px-4 py-12">
<div className="mb-8">
<h1 className="text-4xl font-bold text-white mb-2">Team Chat</h1>
<p className="text-slate-400">Internal collaboration and team discussions</p>
<p className="text-slate-400">
Internal collaboration and team discussions
</p>
</div>
<div className="grid md:grid-cols-3 gap-8">
@ -160,9 +173,12 @@ export default function StaffChat() {
<div className="flex gap-3">
<div className="w-10 h-10 rounded-full bg-blue-500/20 flex-shrink-0" />
<div>
<p className="text-sm text-white font-medium">Sarah Johnson</p>
<p className="text-sm text-white font-medium">
Sarah Johnson
</p>
<p className="text-slate-300 text-sm mt-1">
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.
</p>
<p className="text-xs text-slate-500 mt-2">10:30 AM</p>
</div>
@ -171,9 +187,12 @@ export default function StaffChat() {
<div className="flex gap-3">
<div className="w-10 h-10 rounded-full bg-purple-500/20 flex-shrink-0" />
<div>
<p className="text-sm text-white font-medium">Mike Chen</p>
<p className="text-sm text-white font-medium">
Mike Chen
</p>
<p className="text-slate-300 text-sm mt-1">
Great! Looking forward to building amazing things together.
Great! Looking forward to building amazing things
together.
</p>
<p className="text-xs text-slate-500 mt-2">10:35 AM</p>
</div>
@ -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"
/>
<Button className="bg-purple-600 hover:bg-purple-700">Send</Button>
<Button className="bg-purple-600 hover:bg-purple-700">
Send
</Button>
</div>
</div>
</Card>
@ -201,18 +222,10 @@ export default function StaffChat() {
</CardTitle>
</CardHeader>
<CardContent className="text-blue-200/80 space-y-2">
<p>
Full-featured internal messaging platform
</p>
<p>
Channels for teams and projects
</p>
<p>
Direct messages and group chats
</p>
<p>
File sharing and integrations
</p>
<p> Full-featured internal messaging platform</p>
<p> Channels for teams and projects</p>
<p> Direct messages and group chats</p>
<p> File sharing and integrations</p>
</CardContent>
</Card>
</div>

View file

@ -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 <Layout><div className="container py-20">Loading...</div></Layout>;
if (loading)
return (
<Layout>
<div className="container py-20">Loading...</div>
</Layout>
);
return (
<Layout>
<div className="min-h-screen bg-gradient-to-br from-slate-900 via-slate-800 to-slate-900">
<div className="container mx-auto px-4 py-12">
<div className="mb-8">
<h1 className="text-4xl font-bold text-white mb-2">Team Directory</h1>
<p className="text-slate-400">Find and connect with AeThex team members</p>
<h1 className="text-4xl font-bold text-white mb-2">
Team Directory
</h1>
<p className="text-slate-400">
Find and connect with AeThex team members
</p>
</div>
{/* Search Bar */}
@ -105,7 +114,9 @@ export default function StaffDirectory() {
{/* Results */}
{isLoading ? (
<div className="text-center py-12 text-slate-400">Loading team members...</div>
<div className="text-center py-12 text-slate-400">
Loading team members...
</div>
) : filteredMembers.length === 0 ? (
<div className="text-center py-12 text-slate-400">
No staff members found matching your search
@ -120,8 +131,12 @@ export default function StaffDirectory() {
<CardHeader>
<div className="flex items-start justify-between">
<div className="flex-1">
<CardTitle className="text-white">{member.full_name}</CardTitle>
<p className="text-sm text-slate-400 mt-1">{member.position || "Team Member"}</p>
<CardTitle className="text-white">
{member.full_name}
</CardTitle>
<p className="text-sm text-slate-400 mt-1">
{member.position || "Team Member"}
</p>
</div>
{member.role && (
<Badge className="bg-purple-500/30 text-purple-300 border-purple-500/50 capitalize">
@ -143,7 +158,10 @@ export default function StaffDirectory() {
{member.phone && (
<div className="flex items-center gap-2 text-slate-400 text-sm">
<Phone className="h-4 w-4 text-slate-500" />
<a href={`tel:${member.phone}`} className="hover:text-purple-400">
<a
href={`tel:${member.phone}`}
className="hover:text-purple-400"
>
{member.phone}
</a>
</div>
@ -163,7 +181,8 @@ export default function StaffDirectory() {
{/* Stats */}
<div className="mt-12 pt-8 border-t border-slate-700/50">
<p className="text-center text-slate-400">
Showing {filteredMembers.length} of {staffMembers.length} team members
Showing {filteredMembers.length} of {staffMembers.length} team
members
</p>
</div>
</div>

View file

@ -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 <Layout><div className="container py-20">Loading...</div></Layout>;
if (loading)
return (
<Layout>
<div className="container py-20">Loading...</div>
</Layout>
);
const docs = [
{
@ -57,13 +68,19 @@ export default function StaffDocs() {
<div className="min-h-screen bg-gradient-to-br from-slate-900 via-slate-800 to-slate-900">
<div className="container mx-auto px-4 py-12">
<div className="mb-8">
<h1 className="text-4xl font-bold text-white mb-2">Documentation & API</h1>
<p className="text-slate-400">Internal docs, API keys, and credentials</p>
<h1 className="text-4xl font-bold text-white mb-2">
Documentation & API
</h1>
<p className="text-slate-400">
Internal docs, API keys, and credentials
</p>
</div>
{/* Documentation */}
<div className="mb-12">
<h2 className="text-2xl font-bold text-white mb-6">Documentation</h2>
<h2 className="text-2xl font-bold text-white mb-6">
Documentation
</h2>
<div className="grid md:grid-cols-2 gap-6">
{docs.map((doc, idx) => {
const IconComponent = doc.icon;
@ -79,7 +96,9 @@ export default function StaffDocs() {
<IconComponent className="h-5 w-5 text-blue-400" />
</div>
<div>
<CardTitle className="text-white">{doc.title}</CardTitle>
<CardTitle className="text-white">
{doc.title}
</CardTitle>
<CardDescription className="text-slate-400">
{doc.description}
</CardDescription>
@ -88,7 +107,10 @@ export default function StaffDocs() {
</div>
</CardHeader>
<CardContent>
<Button variant="ghost" className="text-blue-400 hover:text-blue-300 p-0">
<Button
variant="ghost"
className="text-blue-400 hover:text-blue-300 p-0"
>
Read Docs <ExternalLink className="ml-2 h-4 w-4" />
</Button>
</CardContent>
@ -116,13 +138,19 @@ export default function StaffDocs() {
>
<div>
<p className="text-white font-medium">{key.name}</p>
<p className="text-slate-400 text-sm font-mono">{key.key}</p>
<p className="text-slate-400 text-sm font-mono">
{key.key}
</p>
</div>
<div className="flex items-center gap-3">
<Badge className="bg-green-500/20 text-green-300 border-green-500/50 capitalize">
{key.status}
</Badge>
<Button variant="ghost" size="sm" className="text-blue-400 hover:text-blue-300">
<Button
variant="ghost"
size="sm"
className="text-blue-400 hover:text-blue-300"
>
Copy
</Button>
</div>